kafka服务端有很多参数配置,涉及使用,调优的各个方面,虽然这些参数大多数情况下不需要更改,但了解这些参数,在做kafka调优的时候很重要。
zookeeper.connect
该参数指明broker要连接zookeeper集群的服务地址和端口号,没有默认值,且为必填参数。kafka默认连接到zookeeper的根路径下,可以通过chroot改变默认路径,使用chroot参数,可以使得一套zk部署多个kafka集群。
listeners
该参数指明broker监听客户端连接地址列表,即客户端要连接broker的入口地址。配置格式为:
protocoll://hostname1:port1,protocoll://hostname2:port2
其中protocoll代表协议类型,kafka当前支持的协议类型有PLAINTEXT,SSL,SASL,SASL_SSL等。
与此参数关联的advertised.listeners,作用和listeners类似,默认值为null。不advertised.listeners
主要用于IaaS(Infrastructure as a service)环境,比如公有云上的机器通常配备多块网卡,既包含私有网网卡,又包含共有网网卡,对于这种情况,可以设置advertised.listeners参数绑定公网ip供外部客户使用,而listeners来绑定私网IP地址供broker间通讯使用。
broker.id
该参数用来指定kafka集群中broker的唯一标识,默认值为-1.如果没有设置,那么kafka会自动生成一个。这个参数还和meta.properties文件及服务端参数broker.id.generation.enable和reserved.broker.max.id有关。
log.dir和log.dirs
kafka把所有的消息都保存在磁盘上,而这两个参数用来配置kafka日志文件存放的根目录。一般情况下,log.dir用来配置单个根目录,而log.dirs用来配置多个根目录(以逗号分隔),但是kafka并没有对此做强制性限制,也就是说,log.dir和log.dirs都可以用来配置单个目录或者多个目录。log.dirs的优先级比log.dir的高。默认情况下只配置了log.dir参数,其默认值为/tmp/kafka-logs
message.max.bytes
该参数用来指定broker所能接收消息的最大值,默认值为1000012(B),约等于976.7KB。如果producer发送的消息大于这个参数所设置的值,就会报出RecordTooLargeException的异常。如果需要修改这个参数,还需要考虑max.request.size(客户端参数),max.message.bytes(topic端参数)的影响。
## 基础配置
## broker id列表,多个以","分隔
brokerids=0,1,2
## broker监听的csv列表,格式是[协议]://[主机名]:[端口],[协议]://[主机名]:[端口]。该参数用于客户端连接broker使用。
listeners=PLAINTEXT://{PODIP}:9092
## zookeeper的连接串,必须指定,多个以','分隔,如果使用一套zookeeper管理多个kafka集群,则zookeeper的chroot必须指定。
zookeeper.connect=zookeeper-kutp-test2:12181
## 是否允许在服务器上自动创建topic
auto.create.topics.enable=true
## 是否允许删除topic。如果关闭此配置,通过管理工具删除topic将不再生效
delete.topic.enable=true
## 是否允许leader平衡。后台线程会定期检查并触发leader平衡。
auto.leader.rebalance.enable=false
## 每个topic的默认分区大小
num.partitions=3
## 每个topic的默认副本数
default.replication.factor=2
## 系统topic的副本数
offsets.topic.replication.factor=2
## 副本同步线程数
num.replica.fetchers=2
min.insync.replicas=1
## 数据保留配置
## 数据保存目录
log.dir=/var/lib/kafka
## 数据保留大小阈值,单位:b
log.retention.bytes=10737418240
## 数据保留时间阈值,单位:h
log.retention.hours=168
## 每个segment的大小
log.segment.bytes=1073741824
## 根据资源修改配置
## 该参数控制broker实际处理网络请求的线程数
num.io.threads=8
## 用于处理各种后台任务的线程数量
background.threads=8
## 控制broker在后台处理来自网络请求的线程数,该参数只是转发请求(转发给其他线程处理),并不会对其进行处理
num.network.threads=4
## 每个topic最大消息大小
message.max.bytes=10485760
## socket请求的最大大小
socket.request.max.bytes=104857600
## 其他配置
## 是否允许服务器自动生成broker.id。
broker.id.generation.enable=true
## 可以用于broker.id的最大数量
reserved.broker.max.id=1000
## 压缩方式。 uncompressed, snappy, lz4, gzip, producer
compression.type=producer
## 每个IP允许的最大连接数
max.connections.per.ip=10000
## 系统topic的partation大小
offsets.topic.num.partitions=50
offsets.retention.minutes=20160
## zookeeper session超时时间
zookeeper.connection.timeout.ms=240000
## consumer注册允许的最大会话超时时间
group.max.session.timeout.ms=300000
## consumer注册允许的最小会话超时时间
group.min.session.timeout.ms=6000
## 是否启用不在ISR集合中的副本作为leader
unclean.leader.election.enable=false
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=2
## 数据恢复线程数
num.recovery.threads.per.data.dir=4
参考文献:
《深入理解Kafka核心设计与实践理论》