Kafka 服务端配置文件详解

Posted by 陈树义 on 2020-12-16

Kafka 框架中的配置文件是 <kafka_dir>/config/server.properties,它定义了 Kafka 监听的端口、接收发送线程大小、日志保存期限等信息。

我使用的 Kafka 版本是 kafka_2.11-1.0.0,下面我将以这个版本为例说说 server.properties 文件中各项配置的意义。

Zookeeper设置

# Zookeeper设置。连接多个Zookeeper用逗号隔开。
zookeeper.connect=localhost:2181

# 连接Zookeeper超时时间
zookeeper.connection.timeout.ms=6000

Broker ID

# Kafka 服务器的唯一 ID,每个 Kafka 服务器的 ID 不能重复。
broker.id=0

日志刷新策略

Kafka 内部实现并不是接收到一条消息就写入文件的,而是收到消息后先暂时存储到内存中,等到达到特定条数或者达到特定时间才批量写入文件。通过这种方式,Kafka 能够实现高并发的写入速度。

# 数据达到多少条就将消息刷到磁盘
log.flush.interval.messages=10000

# 多久将累积的消息刷到磁盘,任何一个达到指定值就触发写入
log.flush.interval.ms=1000

存储日志设置

# 日志存储目录
log.dirs=/tmp/kafka-logs

# 是否允许自动创建Topic,线上建议设置为false
auto.create.topics.enable=true

# 每个Topic默认的分区数
num.partitions=1

# 每个分区的默认副本数,不能大于集群的服务器个数
default.replication.factor=1

# 每个数据目录用来日志恢复的线程数目
num.recovery.threads.per.data.dir=1

网络设置

# Kafka服务器监听的端口
listeners=PLAINTEXT://:9092

# broker处理消息的最大线程数,一般情况下数量为cpu核数
num.network.threads=3

# broker处理磁盘IO的线程数,数值为cpu核数2倍
num.io.threads=8

# socket的发送缓冲区
socket.send.buffer.bytes=102400

# socket的发接收缓冲区
socket.receive.buffer.bytes=102400

# socket请求的最大数值,防止serverOOM
socket.request.max.bytes=104857600

日志保留策略

# 日志文件保留时长。当超过这个值,最早的segment数据会被删除。
log.retention.hours=168

# 分区存储的最大数据大小。当超过这个值,最早的segment数据会被删除。
#log.retention.bytes=1073741824

# 每个segment文件的大小。当超过这个值,会创建新的segment文件。
log.segment.bytes=1073741824

# 日志保留策略的检查周期。用于定时检查是否应该删除特定文件。
log.retention.check.interval.ms=300000

副本同步配置

# 当follower落后leader指定数值的消息数,则会将其从ISR(In Sync Replica)列表中移除。默认值是4000。
replica.lag.max.messages=4000
# 该follower超过指定时间未从leader fetch数据,则从ISR中移除。默认值时10000。
replica.lag.time.max.ms=10000

组协调设置

# 消费组重新分配消费分区的延时。一般线上设置为3000ms是比较合适的。
# 这个参数的主要效果就是让coordinator推迟空消费组接收到成员加入请求后本应立即开启的rebalance。在实际使用时,假设你预估你的所有consumer组成员加入需要在10s内完成,那么你就可以设置该参数=10000。
group.initial.rebalance.delay.ms=0