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

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

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

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

  1. broker.id=0

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

  1. port=
  2. host.name=10.171.97.1

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

这里的 PLAINTEXT 表示明文传输

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

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

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

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

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

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

  1. 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 通讯需要用到的配置。

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

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

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

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

5. topic 相关的部分

  1. delete.topic.enable=true
  2. auto.create.topics.enable=false
  3. unclean.leader.election.enable=false
  4. 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. 日志数据保留相关的参数

  1. ############################# Log Retention Policy #############################
  2.  
  3. # The following configurations control the disposal of log segments. The policy can
  4. # be set to delete segments after a period of time, or after a given size has accumulated.
  5. # A segment will be deleted whenever *either* of these criteria are met. Deletion always happens
  6. # from the end of the log.
  7.  
  8. # The minimum age of a log file to be eligible for deletion due to age
  9. log.retention.hours=
  10.  
  11. # A size-based retention policy for logs. Segments are pruned from the log unless the remaining
  12. # segments drop below log.retention.bytes. Functions independently of log.retention.hours.
  13. #log.retention.bytes=
  14.  
  15. # The maximum size of a log segment file. When this size is reached a new log segment will be created.
  16. log.segment.bytes=
  17.  
  18. # The interval at which log segments are checked to see if they can be deleted according
  19. # to the retention policies
  20. log.retention.check.interval.ms=300000
  21.  
  22. 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. ES6之reduce和reduceRight方法应用实例

    for循环是最基本的遍历循环,但是有些时候并不是很实用,且效率和性能较低,故本文列举出工作学习中碰到的reduce方法应用实例,供自己揣摩熟练应用,以提高自己的研发水平和研发效率. reduce方法( ...

  2. Java线程设计模式(五)

    多线程的设计模式:Future模式.Master-Worker模式,生产消费者模式 public interface Data { String getRequest(); } public clas ...

  3. C#获取汉字拼音和首字母

    C#获取汉字拼音和首字母 引入NPinyin using NPinyin; 调用 /// <summary> /// 中文首字母大写 /// </summary> /// &l ...

  4. 论PM与团队与敏捷开发

    敏捷开发是每个有追求的PM都会去读的书 敏捷开发是很少程序会去读的书 敏捷开发是团体其他人很少会读的书 然而, 据我的 所见, 所闻, 所论 敏捷开发在大家的脑袋里分为很多种版本 既有可以一辩的新鲜思 ...

  5. 简述几个css hack?【CSS】

    (1) 图片间隙  在div中插入图片,图片会将div下方撑大3px. hack1:将<div>与<img>写在同一行. hack2:给<img>添加display ...

  6. HTML5新增元素和移除的元素?

    新增元素: 图像Canvas 多媒体video.audio 本地存储localStorage.sessionStorage 语义化更好的内容元素aticle.header.footer.nav.sec ...

  7. spring 自定义schema 加载异常 White spaces are required between publicId and systemId.

    spring 项目启动报错 报错日志如下: Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreExcepti ...

  8. robot framework笔记(三):扩展SeleniumLibrary库 (自定义关键字)

    (一)自定义和浏览器相关的关键字 以下代码GitHub 版本库地址: https://github.com/blairwind/blog_rf SeleniumLibrary的扩展文档中提供了3种增加 ...

  9. 二十二、mysql索引原理详解

    背景 使用mysql最多的就是查询,我们迫切的希望mysql能查询的更快一些,我们经常用到的查询有: 按照id查询唯一一条记录 按照某些个字段查询对应的记录 查找某个范围的所有记录(between a ...

  10. tomcat运行一段时间出“org.apache.coyote.http11.Http11Processor.service Error parsing HTTP request header”

    试了好多种方法,貌似还是没有解决问题,不过也学到了点东西,记录下备忘吧. 异常详情: 1.首先看到最多的就是说在server.xml中的Connector中添加maxHttpHeaderSize=&q ...