Kafka 核心配置文件详解:server.properties
Kafka 的配置文件是控制集群行为的核心,其中 server.properties 是 Broker 节点的主配置文件,包含了 Broker 身份、网络、存储、日志、ZooKeeper 连接等关键参数。理解这些配置有助于优化 Kafka 性能、确保可靠性,并根据业务场景进行定制。本文将逐节解析 server.properties 中的核心配置项。
Server Basics(服务器基础配置)
1. broker.id
- 作用:Broker 节点的唯一标识,在集群中必须唯一。
- 默认值:
0 - 说明:
- 集群中每个 Broker 需配置不同的
broker.id(如 0、1、2…)。 - 若启用动态 Broker ID(
broker.id.generation.enable=true),可自动生成 ID,无需手动配置。
- 集群中每个 Broker 需配置不同的
2. delete.topic.enable
- 作用:控制是否允许删除主题(Topic)。
- 默认值:
false(不允许删除) - 说明:
- 生产环境建议设为
true,方便清理无用主题。 - 主题删除后,相关数据(日志文件、ZooKeeper 元数据)会被彻底删除,操作不可逆。
- 生产环境建议设为
Socket Server Settings(网络配置)
1. listeners
作用:指定 Broker 监听客户端连接的地址和协议。
默认值:未配置(默认监听
PLAINTEXT://0.0.0.0:9092)格式:
listener_name://host:port示例:
1
listeners=PLAINTEXT://localhost:9092,SSL://localhost:9093
表示同时支持明文(PLAINTEXT)和 SSL 加密连接。
2. advertised.listeners
- 作用:向客户端(生产者 / 消费者)公告的连接地址(如公网地址)。
- 默认值:与
listeners相同 - 说明:
- 若 Broker 部署在防火墙后或使用 NAT,需配置公网地址,否则客户端可能无法连接。
3. num.network.threads
- 作用:处理网络请求的线程数(如接收客户端连接、解析请求)。
- 默认值:
3 - 建议:高并发场景可增至
5-10,避免网络线程成为瓶颈。
4. num.io.threads
- 作用:处理磁盘 I/O 的线程数(如消息写入磁盘、读取日志)。
- 默认值:
8 - 建议:I/O 密集型场景可增至
16-32,需与磁盘性能匹配。
5. 套接字缓冲区配置
socket.send.buffer.bytes:发送数据的套接字缓冲区大小(默认102400字节,即 100KB)。socket.receive.buffer.bytes:接收数据的套接字缓冲区大小(默认102400字节)。socket.request.max.bytes:单个请求的最大字节数(默认104857600字节,即 100MB),超过则拒绝。
Log Basics(日志存储基础配置)
1. log.dirs
- 作用:Kafka 消息日志(分区数据)的存储路径。
- 默认值:
/tmp/kafka-logs - 说明:
- 可配置多个路径(用逗号分隔),Kafka 会在路径间平均分配数据,提升 I/O 吞吐量。
- 生产环境需指定持久化目录(非临时目录),避免重启后数据丢失。
2. num.partitions
- 作用:新建主题时的默认分区数。
- 默认值:
1 - 建议:根据集群规模和吞吐量需求调整,如设为
3-12(分区数越多,并行度越高,但管理成本增加)。
3. num.recovery.threads.per.data.dir
- 作用:每个日志目录用于数据恢复和清理的线程数。
- 默认值:
1 - 说明:重启 Broker 时,线程会修复损坏的日志片段,高负载集群可增至
2-4。
Internal Topic Settings(内部主题配置)
Kafka 有两个内置主题,用于存储消费者偏移量和事务状态:
__consumer_offsets:存储消费者组的偏移量(默认 50 个分区)。__transaction_state:存储事务相关元数据。
1. offsets.topic.replication.factor
- 作用:
__consumer_offsets主题的副本数。 - 默认值:
1 - 建议:生产环境设为
3(至少 2),避免偏移量数据丢失导致消费者重复消费。
2. transaction.state.log.replication.factor
- 作用:
__transaction_state主题的副本数。 - 默认值:
1 - 建议:同偏移量主题,设为
3确保事务数据可靠。
Log Flush Policy(日志刷盘策略)
控制消息从内存刷新到磁盘的时机,平衡可靠性与性能:
1. log.flush.interval.messages
- 作用:累计多少条消息后强制刷盘(默认未配置,即不按消息数触发)。
2. log.flush.interval.ms
- 作用:消息在内存中最长保留时间(默认未配置,即不按时间触发)。
- 说明:
- Kafka 默认依赖操作系统页缓存(OS Cache),由 OS 决定刷盘时机(延迟刷盘,提升性能)。
- 若需强可靠性(如金融场景),可配置
log.flush.interval.ms=1000(每 1 秒刷盘),但会降低吞吐量。
Log Retention Policy(日志保留策略)
控制消息在磁盘上的保留时间或大小,避免存储空间耗尽:
1. log.retention.hours
- 作用:日志片段(Segment)的保留时间(默认
168小时,即 7 天)。 - 扩展配置:
log.retention.minutes:按分钟配置(优先级高于小时)。log.retention.ms:按毫秒配置(优先级最高)。
2. log.retention.bytes
- 作用:单个分区的最大保留字节数(默认未配置,即不限制)。
- 说明:若超过该值,旧的日志片段会被删除(与时间策略取 “或” 关系)。
3. log.segment.bytes
- 作用:单个日志片段(Segment)的最大大小(默认
1073741824字节,即 1GB)。 - 说明:达到该大小后,会创建新的日志片段,旧片段按保留策略清理。
4. log.retention.check.interval.ms
- 作用:检查日志片段是否可删除的间隔时间(默认
300000毫秒,即 5 分钟)。
Zookeeper(ZooKeeper 配置)
Kafka 依赖 ZooKeeper 存储集群元数据(如 Broker 列表、主题配置、分区副本信息)。
1. zookeeper.connect
作用:ZooKeeper 集群地址。
默认值:
localhost:2181示例:集群配置(用逗号分隔):
1
zookeeper.connect=zk1:2181,zk2:2181,zk3:2181/kafka # 可选指定 ZooKeeper 根路径
2. zookeeper.connection.timeout.ms
- 作用:连接 ZooKeeper 的超时时间(默认
6000毫秒,即 6 秒)。
Group Coordinator Settings(消费者组协调配置)
1. group.initial.rebalance.delay.ms
- 作用:消费者组初始化时,延迟第一次重平衡(Rebalance)的时间。
- 默认值:
0(开发环境),生产环境默认3000毫秒(3 秒)。 - 说明:延迟重平衡可避免消费者启动过程中频繁触发重平衡,减少集群开销。
生产环境关键配置建议
- 可靠性:
offsets.topic.replication.factor=3transaction.state.log.replication.factor=3- 主题副本数(
replication.factor)≥ 2。
- 性能:
num.network.threads=5-10,num.io.threads=16-32log.dirs配置多个磁盘路径,提升 I/O 并行度。
- 存储:
log.retention.hours=72(根据业务需求调整,如 3 天)log.segment.bytes=1073741824(1GB,避免片段过多)。
- 网络:
- 明确配置
listeners和advertised.listeners,确保客户端正常连接
- 明确配置