Kafka提供很多的参数:broker参数、topic参数、producer参数、consumer参数等,方便我们对kafka的性能做调整,本博文就来归纳总结下常见的参数
参数的说明是基于Kafka 2.12-2.3.0版本
详细可以参考官网
broker参数
broker端的参数在Kafka目录下的config/server.properties
文件中
参数名称 | 备注说明 |
---|---|
broker.id | kafka的唯一标志,全局唯一,默认是-1,如果不指定,则自动生成,也是全局唯一 |
log.dirs | 指定了kafka持久化消息的目录;可以是多个值,以逗号隔开;设置多个目录,可以提高系统的吞吐量 |
zookeeper.connect | kafka依赖的zookeeper的ip和port;可以是zookeeper集群,以逗号隔开 |
listeners | broker监听器,主要用于client连接broker使用,格式:协议://ip:port,协议://ip:port,协议包括:PLAINTEXT/SSL/SASL_SSL等,如果不指定,则默认所有的client都能连接broker |
advertised.listeners | 和listeners类似,主要用于laas环境下,在多网卡的环境中,可以设置该参数值提供给外网的client访问 |
log.retention.{hours/minutes/ms} | 控制消息数据留存的时间,同时设置优先ms,默认留存时间是7d |
log.retention.bytes | 控制消息日志保存的大小,超过该值的大小,则kafka会自动清理该分区的过期日志端文件,默认值是1073741824,值为-1时,表示不会根据消息的大小来删除消息日志 |
num.network.threads | 控制broker端在后台用于处理网络请求的线程数,默认是3 |
num.io.threads | 控制broker端处理磁盘IO的线程数,默认是8 |
message.max.bytes | kafka接收最大消息的大小,默认是977kb |
log.segment.bytes | topic的分区是以一堆segment文件存储的,这个控制每个segment的大小,会被topic创建时的指定参数覆盖 |
log.retention.check.interval.ms | 周期性检查是否有日志符合删除的条件,默认值是300s |
num.recovery.threads.per.data.dir | kafka broker启动的过程中会加载此节点上所有topic的log文件,如果数据量非常大会导致加载时间过长,通过修改该值可以加快加载的速度,默认值是1 |
unclean.leader.election.enable | 是否允许非ISR中的副本被选举为leader,如果设置为true的话,broker端可能因日志截断而造成消息丢失 |
replication.factor | 设置主题的副本数,一般使用default.replication.factor |
topic参数
如果将broker参数看作是全局参数设置,那么topic参数就是局部参数设置,参数名称和broker中的参数名称是一致的,不过在topic中设置了,会覆盖broker中的参数设置,常见的有以下几种:
参数名称 | 备注说明 |
---|---|
message.max.bytes | 覆盖全局的 message.max.bytes,即为每个topic指定不同的最大消息的大小 |
retention.bytes | 覆盖全局的log.retention.bytes 每个topic设置不同的消息留存大小 |
producer参数
消息生产者发送消息到kafka指定的topic中,所以producer端的参数大多跟topic和消息有关
参数名称 | 备注说明 |
---|---|
key.serializer | 消息序列化,可以指定系统已经提供的序列化方式,也可以自定义序列化方式 ,自定义需要实现org.apache.kafka.common.serialization.Serializer接口,参数值是序列化处理器的全路径名 |
value.serializer | 跟key.serializer一样 |
acks | 控制producer生产消息的持久性,值范围有0、1、all |
buffer.memory | 指定producer端用于缓存消息的缓冲区大小,单位是字节,默认是32MB |
compression.type | 消息压缩的类型,默认是none,值范围:GZIP、Snappy、LZ4 |
retries | 消息重试的次数 |
batch.size | producer端批量发送消息的批大小 |
request.timeout.ms | broker响应producer端的超时时间大小,默认是30s |
max.block.ms | 内存缓冲区在填满时,producer处于阻塞状态,并停止接收新的消息而不是抛出异常 |
max.in.flight.requests.per.connection | 限制了producer在单个broker链接上能否发送的未响应请求的数量,如果设置成1,则可以保证消息的顺序性 |
consumer参数
参数名称 | 备注说明 |
---|---|
group.id | 指定consumer group 的名字 |
key.deserializer | 为消息的key反序列化,也可以自定义,需要实现org.apache.kafka.common.serialization.Deserializer接口 |
value.deserializer | 为消息体反序列化,跟key.deserializer类似 |
session.timeout.ms | consumer group检测组内成员发送崩溃的时间(coordinator检测失败的时间) |
max.poll.interval.ms | consumer处理逻辑最大的时间 |
auto.offset.reset | 指定了无位移或位移移界(即consumer要消费的消息的位移不在当前消息日志的合理区间范围)时kafka的应对策略,有三个值:earliest、latest、none |
enable.auto.commit | 指定consumer是否自动提交位移 |
fetch.max.bytes | 指定consumer端单次获取数据的最大字节数,若消息的内容很大,则该值应该调更大点,否则这个消息无法被消费,默认是52428800 |
max.poll.records | 控制单次poll调用返回的最大消息数,默认是500条 |
heartbeat.interval.ms | coordinator要开启新一轮的rebalance时,该参数控制consumer group的成员何时得知新的rebalance,该值必须要小于session.timeout.ms |
connections.max.idle.ms | Kafka定义关闭空闲Socket的时间间隔,默认是9分钟 |