Kafka参数配置(broker、topic、jvm)

broker中有大概200多个参数,挑选几个重要的记录下来:

1
2
3
4
5
6
7
log.dirs = /data/kafka1,/data/kafka2,/data/kafka3 #建议每个目录都挂在不同的硬盘上,提高读写性能,也能够支持故障转移

zookeeper.connect = zk1:2181,zk2:2181,zk3:2181/kafka1 #最后添加斜杠组名,使zk支持管理多个kafka集群。

listeners:#PLAINTEXT 表示明文传输、SSL表示使用SSL或TLS加密传输
advertised.listenners:#表明该broker对外发布
#都使用主机名,不建议使用IP,因为Broker源代码中使用的是主机名,IP可能导致不能访问。

Topic

1
2
3
4
5
auto.create.topics.enable:false #是否允许自动创建Topic,建议设置为false,不是设置有可能代码中写错了名称就自动创建错误的Topic。
unclean.leader.election.enable:false #是否允许Unclean Leader选举,不允许数据不完整的副本竞选Leader
auto.leader.rebalance.enable:false #是定期选举Leader,没有性能收益。
retention.ms:规定Topic中消息存放的时间,覆盖Broker中的留存时间,默认7天
retention.bytes:规定Topic中消息的大小,覆盖Broker中的存放数据大小,默认-1

数据存放

1
2
3
log.retention.{hour|minutes|ms)#设置Broker数据留存的时间,一般设置hour
log.retention.byte#设置Broker存放数据的大小,-1不限制
message.max.bytes#设置允许单条message的大小,默认1M,建议改成5M

JVM

1
2
3
4
5
6
7
堆大小默认1G,建议手动修改为6G,因为KakfaBroker与客户端交互会在堆上创建大量的bytebuffer
KAFKA_HEAP_OPTS:指定堆大小
垃圾回收器,Java8设置为G1回收。
KAFKA_JVM_PERFORMANCE_OPTS:指定垃圾回收器
$> export KAFKA_HEAP_OPTS=--Xms6g --Xmx6g
$> export KAFKA_JVM_PERFORMANCE_OPTS= -server -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:+ExplicitGCInvokesConcurrent -Djava.awt.headless=true
$> bin/kafka-server-start.sh config/server.properties

操作系统

  • 文件描述符限制

    1
    ulimit -n 1000000
  • 文件系统类型

    这里的文件系统类型指的是如ext3,ext4或XFS日志型文件系统,生产环境最好使用XFS类型。

  • Swappiness

    按照尽量少使用交换区的原则设置
    vm.swappiness=1

  • 提交时间
    kafka向页缓存(Page cache)写入数据即视为写成功来,并不是等落盘才算成功。页缓存会定时刷到文件中,间隔默认5秒可以适当增加这个间隔。kafka软件层做了多副本冗余,不用太担心宕机丢失数据。