二、broker端核心参数
1. broker.id
参数说明:broker的唯一标识id,默认值为-1,如果不指定Kafka会自动生成一个id。生产环境推荐设置从0开始,按1递增的数字,比如0,1,2,3...等。
2. log.dirs
参数说明:设置Kafka持久化消息的数据目录,如果不设置Kafka会将消息持久化到/tmp/kafka-logs,通常都需要我们手动设置。多个目录逗号分隔,也就是一个csv列表。
调优建议:这是必须要上线前规划好的,建议设置成挂载不同磁盘的多个数据目录。创建topic时分区会自动均匀的分布到不同目录里,磁盘的io请求与空间占用也会负载均衡。
3. zookeeper.connect
参数说明:指定Kafka依赖的ZK连接信息,这个参数同样是一个csv列表,比如:zk1:2181,zk2:2181,zk3:2181。因为Kafka依靠Zookeeper做分布式协调服务,负责存储和管理Kafka集群中的元数据,包括broker列表、topic信息、分区与副本信息等。因此这是一个比较重要的参数。
调优建议:如果要使用一套ZK集群管理多套Kafka集群,这个时候可以在参数设置时指定ZK的chroot,比如使用zk1:2181,zk2:2181,zk3:2181/kafka1与zk1:2181,zk2:2181,zk3:2181/kafka2代表两套Kafka集群。
4. listeners
参数说明:broker监听器,这是客户端要连接broker的入口地址列表,由一个csv格式的三元组组成,三元组的格式为<协议名称,主机名,端口号>。当前Kafka支持的协议类型包括PLAINTEXT、SSL与SASL_SSL,如果未启用安全认证,使用PLAINTEXT协议即可,比如PLAINTEXT:192.168.10.2:9092。
5. advertised.listeners
参数说明:这个也是broker的监听器,advertised的含义可以理解为公布的、对外的,这个参数通常用来绑定公网IP以配置Kafka外网访问使用。
6. auto.create.topics.enable
参数说明:是否允许自动创建topic,默认值为true。当消息发送到服务端发现topic不存在时会自动创建topic。经常会因开发人员写错topic名称,导致服务端存在一些稀奇古怪的topic。
调优建议:生产环境建议设置为false,禁用topic自动创建,严格管理topic资源。
7. unclean.leader.election.enable
参数说明:是否允许Unclean Leader选举,默认值为true。这个参数用于控制是否允许非同步副本(参与leader选举,非同步副本中的消息远远落后于leader,如果选举这种副本作为leader可能会造成数据丢失,但会保证服务继续可用。
调优建议:生产环境建议设置为false,关闭Unclean leader选举,因为通常数据的一致性要比可用性更加重要。
8. auto.leader.rebalance.enable
参数说明:是否允许自动leader rebalance功能,默认值为true。默认情况下,Kafka控制器会启动一个定时任务,在满足一定条件(Kafka认为当前leader不够均衡,参考leader.imbalance.per.broker.percentage)时进行leader重选举。
调优建议:考虑到leader重选举的代价比较大,可能会带来性能影响,也可能会引发客户端的阻塞,生产环境建议设置为false。
9. log.retention.{hours|minutes|ms}
参数说明:这三个参数控制消息数据的过期时间,后面的参数比前面的优先级高,默认的消息过期时间是7天。这是时间维度的控制策略,另外还有一个参数log.retention.bytes定义了针对分区的空间维度控制策略,此参数默认值为-1,表示不使用这种策略删除数据,可以仅做了解。
调优建议:建议根据磁盘空间结合业务需要,合理设置参数,一般优先设置log.retention.ms。
10. message.max.bytes
参数说明:broker端能够接收的最大消息大小,默认值为1000012,约等于977KB。
调优建议:默认值偏小,生产环境建议根据实际情况调大该参数。
11. compression.type
参数说明:broker端消息的压缩类型,默认值为producer,表示根据生产者使用的压缩类型,也就是说无论生产者使不使用压缩或者使用了何种压缩,broker端都继承其行为。Kafka目前支持的压缩类型包括gzip、snappy、lz4 及 zstd(Kafka 2.1.0开始支持)。
调优建议:这个参数不建议修改,因为broker端如果和生产者压缩方式不一致,消息达到服务端后要进行解压-压缩操作,严重影响性能。
12. threads相关参数
参数说明:三个线程数配置:num.network.threads,num.io.threads 及 background.threads,分别表示处理网络请求(接收请求与返回响应)的线程数、处理实际请求的线程数(包含磁盘IO等)与执行后台任务的线程数,默认值分别为3、8、10。
调优建议:通常不建议修改,除非参考JVM相关指标(*AvgIdlePercent)发现线程空闲率比较高或低时,可以适当做出调整。