Kafka 真是一个异常稳定的组件,服务器上我们部署了 kafka_2.11-1.0.1 版本的 kafka 除了几次计算时间太长触发了 rebalance 以外,基本没有处理过什么奇怪的问题。

但是还是感觉 Kafka 的配置非常全面非常多,也非常容易把人搞懵逼。有时候看官方文档也就是一句话,经常搞得人不明所以。所以想仔细看看 然后总结一下。

读取配置 server.properties 查看 「Broker」相关配置

1. 设置这个 broker 节点的 id 值

broker.id=0 

2. 可以配置可以访问 kafka 的对应端口号和 hostname

port=
host.name=10.171.97.1

这里需要注意,能访问 kafka 还支持其他类型的监听器,比如这种方式

这里的 PLAINTEXT 表示明文传输

# The address the socket server listens on. It will get the value returned from
# java.net.InetAddress.getCanonicalHostName() if not configured.
# FORMAT:
# listeners = listener_name://host_name:port
# EXAMPLE:
# listeners = PLAINTEXT://your.host.name:9092
#listeners=PLAINTEXT://:9092 # Hostname and port the broker will advertise to producers and consumers. If not set,
# it uses the value for "listeners" if configured. Otherwise, it will use the value
# returned from java.net.InetAddress.getCanonicalHostName().
#advertised.listeners=PLAINTEXT://your.host.name:9092

3. 配置 kafka broker 的集群存储信息,这里有个 log basics 的区域。这一块应该都等待你的配置不会有默认值的,

b# A comma seperated list of directories under which to store log files
log.dirs=/opt/kafka/kafka_2.-1.0./logs # The default number of log partitions per topic. More partitions allow greater
# parallelism for consumption, but this will also result in more files across
# the brokers.
num.partitions=

这里第一个参数是值 kafka 生产数据的日志放在哪个路径。

第二个参数就是创建 topic 的时候默认生成几个 partitions.

log.dirs 这个 s 就代表着他可以被设置多个路径存储日志,这一点非常关键和重要。我们可以在这个参数位置设置上多个路径来提升吞吐量。比如

log.dirs=/opt/kafka/kafka_2.-1.0./logs,/opt/kafka/kafka_2.-1.0./logs1,/opt/kafka/kafka_2.-1.0./logs2

这种配置方法似乎在 1.1版本之后还引入了故障转移机制(failover) 但是我没有尝试过,在这里记录一下之后有时间仔细调研一下。

4. 下面是跟 zookeeper 通讯需要用到的配置。

############################# Zookeeper #############################

# Zookeeper connection string (see zookeeper docs for details).
# This is a comma separated host:port pairs, each corresponding to a zk
# server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002".
# You can also append an optional chroot string to the urls to specify the
# root directory for all kafka znodes.
zookeeper.connect=10.171.97.1:,10.163.13.219:,10.170.249.122: # Timeout in ms for connecting to zookeeper
zookeeper.connection.timeout.ms=

zookeeper.connect 是配置连接 zookeeper 的地址,因为 zookeeper 通常是集群,所以同样可以使用逗号分隔配置多个地址和端口。

zookeeper.connection.timeout.ms 是配置连接 zk 的超时时间

这里注意,所有 ip:port 都可以被更换为 hostname:port 这没什么问题。也有很多人推荐使用 host:port 这种写法,我觉得不写错应该都没啥问题- -

5. topic 相关的部分

delete.topic.enable=true
auto.create.topics.enable=false
unclean.leader.election.enable=false
auto.leader.rebalance.enable=true

5.1. 参数是是否允许可以删除对应的 topic 。这个默认是 False 可以设置打开。因为有时候我们是真的需要删除这个 topic !!!

5.2. 自动创建 topics 开启。这个玩意我建议不开,开启就意味着随便来个客户端接上一个没有的 topic 也会被自动创建上,看上去很方便。如果有不那么熟悉的队友,你就知道这个还是关掉吧。

5.3. 允许除开 leader 副本之外的副本成为 leader。成为 leader 副本的条件就是这个副本是跟上最新的副本的而且 lag 少。但是当他们都挂了之后,设置了这个参数就运行没有跟上的副本成为 leader 副本,不可避免的会产生一些数据丢失。

5.4. 开启这个参数会定期进行 leader 的重新选举。如果我们出现了机器的崩溃可能会造成我们的 副本 leader 进行偏移形成 leader 倾斜。比如我们本来是 0 1 2 三台机器上均衡的分布着各副本的 leader 突然 2 挂了 那么 2 是 leader 那一部分就会向 0 和 1 节点的 isr 副本进行转移。这样当 2重新活过来之后 他上面就没 leader 了。如果我们不再均衡一下 leader 他就一直维持这样了。

因为 kafka 是只有 leader 会对外进行服务的,这样压力就偏移了。开启这个参数我们将可以又重新平衡 leader ,让其恢复到初始状态。

6. 日志数据保留相关的参数

############################# Log Retention Policy #############################

# The following configurations control the disposal of log segments. The policy can
# be set to delete segments after a period of time, or after a given size has accumulated.
# A segment will be deleted whenever *either* of these criteria are met. Deletion always happens
# from the end of the log. # The minimum age of a log file to be eligible for deletion due to age
log.retention.hours= # A size-based retention policy for logs. Segments are pruned from the log unless the remaining
# segments drop below log.retention.bytes. Functions independently of log.retention.hours.
#log.retention.bytes= # The maximum size of a log segment file. When this size is reached a new log segment will be created.
log.segment.bytes= # The interval at which log segments are checked to see if they can be deleted according
# to the retention policies
log.retention.check.interval.ms=300000 message.max.bytes

6.1. log.retention.hours 设置一个日志保留时间,这个除了 hours 可选还有[minutes|ms] 可选比如 log.retention.ms ,感觉这个小时就差不多了吧 默认 168个小时 7天。

6.2. log.retention.bytes 我感觉设置了时间没必要控制大小,这个默认是一个分区一个 G 数据,超过了会滚动删除。如果我有10个 partitions ,就一共可以存储 10G 数据。

下面图片是一个 partition 里的情况。

6.3. log.segment.bytes 这个是设置消息片最大片大小 设置 1g 1g应该够用了也就是到达一 g 之后会切日志并且等待过期。

6.4. log.retention.check.interval.ms 这个是设置多久检查一下是否符合以上配置的间隔时间。

6.5 message.max.bytes 消息默认是 1M 如果生产者尝试发送的消息超过这个大小,不仅消息不会被接收,还会收到 broker 返回的错误消息。跟其他与字节相关的配置参数一样,该参数指的是压缩后的消息大小,也就是说,只要压缩后的消息小于 mesage.max.bytes,那么消息的实际大小可以大于这个值这个值对性能有显著的影响。

7. 客户端生产者参数

7.1 max_in_flight_requests_per_connection  设置成 1 可以保证在有 retry 的情况下也能在一个 partitions 里面进行顺序发送。

7.2 retries  重试次数,如果不设置默认为 0 ,设置了在默认 max_in_flight_requests_per_connection == 5 的情况下可能因为重试机制而在单个 partitions 里乱序。

7.3 delivery.timeout.ms  kafka-python 里还有一个没有支持的 KIP-91 参数,这个参数用于设置发送传输以及重试消息的最大时间。超过 retries 次数和超过这个时间都会跳过该消息。默认是 120s

Reference:

https://matt33.com/2017/09/10/produccer-end/    Kafka 源码解析之 Producer 单 Partition 顺序性实现及配置说明

https://cwiki.apache.org/confluence/display/KAFKA/An+analysis+of+the+impact+of+max.in.flight.requests.per.connection+and+acks+on+Producer+performance    An analysis of the impact of max.in.flight.requests.per.connection and acks on Producer performance

https://www.cnblogs.com/huxi2b/p/6815797.html    Kafka 0.11版本新功能介绍 —— 空消费组延时rebalance

Kafka 深入核心参数配置的更多相关文章

  1. Yarn 生产环境核心参数配置案例

    目录 Yarn 生产环境核心参数配置案例 需求 修改yarn-site.xml配置 分发 重启集群 执行WordCount程序 Yarn 生产环境核心参数配置案例 调整下列参数之前要拍摄Linux快照 ...

  2. Linux服务器核心参数配置

    使用Linux作为长连接的web服务器时,为了增加服务的容量,以及处理性能,需要修改一些参数. 一.多进程绑定CPU 1.使用taskset命令可以绑定进程到指定CPU,以减少多核CPU环境中,单进程 ...

  3. kafka部分重要参数配置-broker端参数

    broker端参数主要在config/server.properties目录下设置: 启动命令:nohup ./kafka-server-start.sh -daemon ../config/serv ...

  4. kafka优化–JVM参数配置优化

    https://blog.csdn.net/u013063153/article/details/73826403

  5. kafka 参数配置 1

    kafka 参数配置 #参数配置 * broker.id : kafka 集群的唯一,标识每个broker * log.dirs : 指定kafka持久化消息的目录,可以设置多个目录,如:/home/ ...

  6. Kafka:主要参数详解(转)

    原文地址:http://kafka.apache.org/documentation.html ############################# System ############### ...

  7. Kafka无消息丢失配置

    Kafka到底会不会丢数据(data loss)? 通常不会,但有些情况下的确有可能会发生.下面的参数配置及Best practice列表可以较好地保证数据的持久性(当然是trade-off,牺牲了吞 ...

  8. 转:浅谈UNIX下Apache的MPM及httpd.conf配置文件中相关参数配置

    为什么要并发处理 以Apache为代表的web服务器中,如果不支持并发,则在一个客户端连接的时候,如果该客户端的任务没有处理完,其他连接的客户端将会一直处于等待状态,这事不可想象的,好像没有为什么要不 ...

  9. tomcat,zookeeper,activeMQ,Kafka设置jvm参数

    1,tomcat设置jvm参数 设置方法:   在tomcat bin 目录增加配置:setenv.sh   #add tomcat pid CATALINA_PID="$CATALINA_ ...

随机推荐

  1. postman 测试Api接口注意事项

    1.简单数据传输 2.对象传输 使用的是post方式请求 在Headers设置: 在Body写入对象信息,主要红线的地方:1.raw选中 2.j'son格式 form表单提交数据测试 在header里 ...

  2. ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件

    原文:https://www.stevejgordon.co.uk/httpclientfactory-aspnetcore-outgoing-request-middleware-pipeline- ...

  3. 【转载】Extjs设置Ajax请求的超时时间timeout

    在Extjs中的Ajax请求中,Ext.Ajax.request 默认超时时间是30秒,有时候我们有比较耗时的操作需要设置更长时间,此时我们就需要修改Ext.Ajax.Requset的超时时间为更长, ...

  4. js --桥接模式

    定义: 将抽象部分与它的实现部分分离,使他们都可以独立的变化. 也就是说,桥接模式里面有两个角色: - 扩充抽象类 - 具体实现类 在写桥接模式之前,想在写一下关于抽象的理解.我觉得抽象这个概念过于抽 ...

  5. 多个echarts图自适应屏幕大小

    当一个echarts图时,可以这样做 //下面my_charts是html中echarts的ID var myChart= echarts.init(document.getElementById(& ...

  6. 昨日万圣节ABAP怪兽级代码谜团,公布答案啦

    首先非常感谢大家在周末还抽出宝贵的时间耗在Jerry昨天发布的文章 一段让人瑟瑟发抖的ABAP代码 上面. 虽然Jerry在文末开玩笑的声称,只有文章阅读量上千或者评论数超过50,才公布答案.其实这只 ...

  7. Linux之项目的部署

    前期准备 python3解释器 uwsgi wsgi(web服务网关接口,就是一个实现了python web应用的协议) virtualenvwrapper 路飞的代码 vue的代码 nginx (一 ...

  8. 网络时间同步服务和chrony

    时间同步和chrony 时间同步:多主机协作工作时,各个主机时间同步很重要,时间不一致会造成很多重要应用的故障,如:加密协议,日志,集群等, 利用NTP(Network Time Protocol) ...

  9. UIP和lwip的区别 转载

    uIP是专门为8位和16位控制器设计的一个非常小的TCP/IP栈.完全用C编写,因此可移植到各种不同的结构和操作系统上,一个编译过的栈可以在几KB ROM或几百字节RAM中运行.uIP中还包括一个HT ...

  10. CV2识别图片A,B,C,D

    这个模型是经过简单训练,只能识别四个英文字母:ABCD,是我为了提取答案才训练的,因为科大,百度,以及腾讯的识别不是很准,所以自己训练自己使用,希望能够给你带来方便.下面是训练好的model,如多你感 ...