Broker端参数
数据存储相关
log.dirs
用于配置 Kafka 日志文件的存储路径。'log.dirs' 无默认值,生产环境中建议将其配置为多个路径,如 “/home/dir1,/home/dir2,/home/dir3” 格式。
理想情况下,'log.dirs' 所配置的多个路径应挂载到多个物理磁盘上,这样配置的优点有两个:
- 提升读写性能:相比单块磁盘,多块物理磁盘同时读写可拥有更高的吞吐量
- 实现故障转移:即 failover。在 Kafka 1.1版本以前,只要 Kafka broker 使用的任何磁盘挂掉,都会导致该 broker 停止服务。自 Kafka 1.1版本开始,对该情况进行了处理,坏掉的磁盘中的数据会自动地移动到可用的磁盘上,且 broker 仍会正常工作。
log.dir
'log.dir' 与 'log.dirs' 都是用于配置 Kafka 日志文件的存储路径,其不同之处在于:
'log.dirs' 可以配置多个路径,而 'log.dir' 只能配置单一路径。基于“读写性能”及“故障转移”方面的考虑,不建议使用 'log.dir' 配置日志文件存储路径,生产环境中仅使用 'log.dirs' 配置即可。
Zookeeper相关
zookeeper.connect
用于配置 broker 连接的 zookeeper 集群地址。
如果多个 Kafka 集群使用同一套 zookeeper 集群,可以借助 chroot 进行配置(chroot 是 Zookeeper 中的概念,类似于别名)。假设有两套 Kafka 集群,分别为 kafkaCluster1 和 kafkaCluster2,两套 Kafka 集群的 'zookeeper.connect' 的配置可以分别设置为: zk1:2181,zk1:2181,zk1:2181/kafkaCluster1 和 zk1:2181,zk1:2181,zk1:2181/kafkaCluster1
Topic相关
auto.create.topics.enable
是否允许自动创建 Topic。生产环境中建议配置为 false,有利于运维把控 Topic 的创建。
unclean.leader.election.enable
ISR之外的副本能否参与 leader 的选举,生产环境中建议设置为 false,具体使用另文说明。
auto.leader.rebalance.enable
是否允许定期进行 leader 选举。由于更换一次 leader 的代价很高,而且这种换 leader 本质上没有任何性能收益,所以在生产环境中建议将 'auto.leader.rebalance.enable' 设置为 false。
数据留存相关
log.retention.{hours | minutes | ms}
这 3 个配置都是用于设置消息的保留时间,从优先级来说 ms > minutes > hours,一般情况下只会设置 'log.retention.hours' 配置。
log.retention.bytes
指定 broker 用于保存消息而使用的磁盘最大字节数。
message.max.bytes
单条消息最大字节数,默认为 1 M,生产环境中建议设置大一些,如有需求可单独设置Topic级别的最大消息配置。
Topic级别参数
如果同时配置了 Topic 级别的参数和 Broker 级别的参数,Topic 级别的参数会覆盖全局 Broker 参数的值。
retention.ms
规定了该 Topic 消息被保存的时长,默认为 7 天。一旦设置了这个值,它会覆盖掉 Broker 端的全局参数值。
retention.bytes
规定要为该 Topic 预留多大的磁盘空间。和全局参数作用相似,这个值通常在多租户的 Kafka 集群中会有用武之地。当前默认值为 -1,表示可以无限使用磁盘。