暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Kafka权威指南学习总结二 -- Kafka安装配置

释福 2021-08-30
426

一、broker常规配置

1、broker.id
    broker的唯一标识符。可设置为任意整数,默认值为0。


2、port
    broker启动端口。配置样本中为9092。


3、zookeeper.connect
    保存broker元数据的Zookeeper地址。

    格式:hostname:port/path。
    路径/path可选,作为Kafka集群的 chroot 环境。


4、log.dirs
    一组逗号分割的本地文件系统路径,即消息保存日志片段在磁盘上存储的目录。
    指定了多路径时,broker根据“最少使用”原则,把同一个分区的日志片段保存到同一个路径下。broker会往拥有最少数目分区的路径新增分区,而不是往拥有最小磁盘空间的路径新增分区。


5、num.recovery.threads.per.data.dir

    对于如下 3 种情况,Kafka 会使用可配置的线程池来处理日志片段。

    5.1、服务器正常启动,用于打开每个分区的日志片段;

    5.2、服务器崩溃后重启,用于检查和截短每个分区的日志片段;

    5.3、服务器正常关闭,用于关闭日志片段。


    默认情况,每个日志目录只使用一个线程。


6、auto.create.topics.enable

    默认情况,Kafka在如下情况自动创建主题:

    6.1、当一个生产者开始往主题写入消息时;

    6.2、当一个消费者开始从主题读取消息时;

    6.3、当任意一个客户端向主题发送元数据请求时。


    显示创建主题(手动,通过配置系统),可把

auto.create.topics.enable设为false。


二、主题的默认配置


1、num.partitions

    指定了新创建的主题将包含多少个分区。默认值为1。


2、log.retention.ms

    决定数据可以保留的时间。

    默认使用 log.retention.hours 参数来配置,默认值 168 小时,即为一周。此外还有 log.retention.minutes。这三个参数一样,配置多个,使用最小值的那个参数。推荐使用log.retention.ms。


3、log.retention.bytes

    可以保留最多的字节数。以此判断消息是否过期(大于此参数值即过期)。作用与每个分区上。

    若同时指定了log.retention.ms,则任一条件满足,消息就会被删除。


4、log.segment.bytes

    作用于单个日志片段,非作用于单个消息。

    日志片段达到log.segment.bytes指定的上限时,当前片段关闭,新的日志片段被打开。

   

    使用时间戳获取偏移量

    日志片段的大小会影响使用时间戳获取偏移量。

    在使用时间戳获取日志偏移量时,Kafka 会检查分区时间里最后修改时间大于时间戳的日志片段(已关闭),该日志片段的前一个文件的最后修改时间小于指定时间戳。然后,Kafka返回该日志片段(即文件名)开发的偏移量。

    对于使用时间戳获取偏移量的操作来说,日志片段越小,结果越准确。


5、log.segment.ms

    控制日志片段多长时间后关闭。与log.setment.ms同时使用时,任一条件满足,皆会关闭当前日志片段,开启新的日志片段。


6、message.max.bytes

    限制单个消息的大小(压缩后)。认 1 000 000,即为 1MB。

    生产者无法发送超过此参数值大小的消息,broker无法接收且返回错误消息。

    

    在服务端和客户端之间协调消息大小的配置

    消费者客户端设置的 fetch.message.max.bytes 需比 message.max.bytes的值大,否则消费者无法读取比较大的消息,进而会导致消费者被阻塞。

    在集群中的broker配置的 replica.fetch.max.bytes 参数也遵循同样的原则。


三、操作系统的调优


1、虚拟内存

    vm.swppiness:指明虚拟机的子系统将如何使用交换分区,而不是只把内存页从页面缓存里移除。需优先考虑减少页面缓存,而不是进行内存交换。

    之前,建议尽量将 vm.swppiness设置为0,意为“除非内存溢出,非则不进行内存交换”。后 Linux内核 3.5-rcl 版本发布,参数发生变化,并被移植到其他的发行版,包括Red Hat 企业内核 2.6.32-303。发生变化后,0意为“在任何情况下都不要进行内存交换”。所以现在建议设置此参数为1。


    vm.dirty.background.ratio:系统内存百分比。多数情况设置为 5。

    可以将vm.dirty.background.ratioo设为小于10的值,使在后台刷新进程将脏页写如磁盘之前,可以减少脏页的数量。

    不可设置为0,斗则会使内核频繁刷新页面缓存,从而降低内核底层设备的硬盘写入提供缓冲的能力。


    vm.dirty.ratio:被内核刷新到磁盘之前,脏页内存的百分比。

    可设置大于20的值(即系统内存的百分比)。此参数设置范围广,60-80是比较合理的值。

    若此参数设置较高的值,建议开启Kafka的复制功能,避免系统崩溃造成数据丢失。


2、网络

    sock读写缓冲区参数:net.core.wmen_default,net.core.rmen_default

    合理值:131 072,即 128 KB。


    sock读写缓冲区最大值参数:net.core.wmem_max,net.core.rmem_max

    合理值:2 097 152,即 2 MB。


    TCP socket读写缓冲区:net.ipv4.tcp_wmem,net.ipv4.tcp_rmem。

    参数的值由 3 个整数组成,空格分隔,分别是最小值、默认值、最大值。最大值不能大于net.core.wmem_max和net.core.rmem_max的大小。


    TCP 时间窗扩展:net.ipv4.tcp_window_scaling

    设置为 1,则是启用时间窗,可以提升客户端传输效率,传输的数据可在服务器进行缓冲。


tcp socket 并发连接:net.ipv4.tcp_max_syn_backlog,默认值1024。

 

net.core.netdev_max_backlog:默认值 1000,设置更大的值,有助于应对网络流量的爆发,特别是在使用千兆网络时,允许更多的数据包排队等待内核处理。


3、垃圾回收器

    Java7引入的G1垃圾回收器:在应用的整个生命周期,G1会自动根据工作负载情况进行自我调节,而且其停顿时间恒定。G1可轻松处理大块的堆内存,把堆内存分为若干小块的区域,每次停顿时并不会对整个对空间进行回收。

    MaxGCPauseMills:每次垃圾回收默认的停顿时间。该值不固定,G1可根据需要使用更长的时间。默认值200ms。即G1会决定垃圾回收的频率以及每一轮需要回收多少个区域,如此计算每轮垃圾回收的时间。


    InitiatingHeapOccupancyPercent:G1启动新一轮垃圾回收之前可以使用的堆内存百分比(包括新生代和老年代)。


    Kafka 对堆内存使用率非常高,易产生垃圾对象,可将者两个参数值设置小一些,以便更高效及时清除垃圾对象。

文章转载自释福,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论