欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

kafka配置

程序员文章站 2022-06-14 10:45:48
...

broker配置

  • 常规配置
  1. broker.id:唯一标识,如果机器名包含唯一性数字(host1.example.comhost2.example.com),那么用数字设置broker.id更适合做主机映射

  2. port:kafka数据端口,默认为9092

  3. zookeeper.connect:保存broker元数据的zk地址,多个以逗号隔开. 格式:hostname:port/path(path作为kafka集群的chroot环境,默认为根路径)

    为什么使用chroot路径?
    因为zk集群可以共享,可以通过chroot路径将broker集群置于不同的路径下

  4. log.dirs:存放kafka数据目录. 一组用逗号分开的本地文件系统路径. 如果制定了多个路径,broker会根据"最少使用"原则,把同一分区的日志保存在同一路径. 要注意,broker会往拥有最少数目分区的路径新增分区,而不是往拥有最小磁盘空间的路径新增分区.

  5. num.recovery.threads.per.data.dir:处理日志的线程池. 默认情况下,每个日志目录只使用一个线程. 因为这些线程只是在服务器启动和关闭时会用到,所以可以设置大量的线程来达到并行操作的目的. 特使是对于包含大量分区的服务器来说,一旦发生奔溃,在进行恢复时使用并行操作会节省数小时时间.

  6. auto.create.topics.enable:默认情况下,kafka会在下面几种情形自动创建主题: 建议设置为false

     * 当一个生产者往主题写入消息时
     * 当一个消费者开始从主题读取消息时
     * 当任意一个客户端向主题发送元数据请求时
    
  • 主题的默认配置
  1. num.partitions:新建主题包含多少个分区. 如果启用了主题自动创建功能(auto.create.topics.enable=true 默认),主题分区个数就是该参数指定的值. 该参数默认值为1. 我们可以增加主题分区的个数,但不能减少分区个数. 所以,要让一个主题的分区个数少于num.partitions指定的值,需要手动创建该主题.

  2. log.retention.ms:数据被保留多久,默认是168小时,也就是一周.

  3. log.retention.bytes:根据消息字节数保留多久. 如果一个包含8个分区的主题,并且log.retention.bytes设为1GB,那么最多保留8GB数据. 所以,当主题分区个数增加时,整个主题可以保留的数据随之增加.
    如果上面2个都设置,那么任意一个满足条件,都会被删除

  4. log.segment.bytes:作于日志片段上,而不是作用域单个消息上. 当消息达到broker时,他们被追加到分区的当前日志片段上. 当日志片段达到log.segment.bytes指定上限时(默认是1GB),当前日志片段就会被关闭, 一个新的日志片段被打开. 如果一个日志片段被关闭,就开始等待过期. 这个参数值越小,就会越频繁关闭额分配新文件,从而降低磁盘写入整体效率…

    如果主题的消息量不大,那么这个参数的大小就尤为重要. 例如,如果一个主题每天接收100MB的消息,而log.segment.bytes使用默认设置,那么需要10天时间才可以填满一个日志片段. 因为在日志片段填满之前是不会过期的,所以如果log.retention.ms被设为1周,那么日志片段最多需要17天才会过期,这是因为关闭日志片段需要10天时间,根据配置的过期时间,还需要保留7天时间(要等到日志片段的最后一个消息过期才能被删除)

  5. log.segment.ms:默认情况下,log.segment.ms没有设定值,所以根据大小来关闭日志片段.
    基于时间的日志片段对磁盘性能影响
    基于时间日志片段时,要考虑并行关闭多个日志片段对磁盘性能的影响. broker在启动之后开始计算日志片段的过期时间,对于哪些数据量小的分区来说,日志片段的关闭时间总是同时发生

  6. message.max.bytes:限制单个消息的大小,默认值是1 000 000,也就是1MB. 该参数指的是压缩后的消息大小,消息的实际大小可以远大于这个值.
    服务端和客户端协调消息大小的配置
    消费者客户端设置的tetch.message.max.bytes必须与服务器端设置的消息大小进行协调. 如果这个值比message.max.bytes小,那么消费者就无法读取比较大的消息,导致出现消费者阻塞的情况. 在为集群的broker设置replica.tetch.max.bytes参数,也遵循同样的原则.