Kafka 的 server.properties 配置项
摘要
- 
本文介绍 CentOS9 中 Kafka 的 server.properties 的配置项,基于 Zookeeper。
 - 
本文使用的 Kafka 版本为 3.9.1。Kafka 团队宣布 3.9 会是 最后一个还带有被弃用的 ZooKeeper 模式 的主要版本。以后版本(如 4.0)将完全弃用 ZooKeeper。
 
Kafka 3.x server.properties 主要配置项清单
- 
关于 server.properties 的配置项,请参考 Kafka 官方文档
 
| 分类 | 参数名 | 默认值 | 说明 | 推荐/备注 | 
|---|---|---|---|---|
| 🗂️ 基本信息 | broker.id | 
0 | Broker 唯一标识 | 集群中必须唯一 | 
node.id | 
- | Raft 模式(KRaft)下使用 | ZK 模式忽略 | |
process.roles | 
- | KRaft 模式角色(controller, broker) | ZK 模式不配置 | |
| 🔌 网络与监听配置 | listeners | 
PLAINTEXT://:9092 | Broker 监听地址 | 可用多个协议,如 SASL_PLAINTEXT, SSL | 
advertised.listeners | 
- | 客户端连接时看到的地址 | 外网访问需配置 | |
listener.security.protocol.map | 
PLAINTEXT:PLAINTEXT | 映射监听器协议 | 多协议时配置 | |
inter.broker.listener.name | 
-(Kafka 2.4+ 默认第一个 listener) | 指定 broker 间通信使用哪个 listener(如 INTERNAL) | 集群内部通信必须一致;常配合多 listener 使用 | |
num.network.threads | 
3 | 网络线程数 | 一般不需修改 | |
num.io.threads | 
8 | 处理请求的 IO 线程数 | 根据 CPU 调整 | |
socket.send.buffer.bytes | 
102400 | 发送缓冲区大小 | 网络优化参数 | |
socket.receive.buffer.bytes | 
102400 | 接收缓冲区大小 | 网络优化参数 | |
socket.request.max.bytes | 
104857600 | 单请求最大大小 (100MB) | 大消息需调大 | |
| ⚙️ 集群与元数据 | log.dirs | 
/tmp/kafka-logs | 数据存储路径 | 多目录可提升性能 | 
num.recovery.threads.per.data.dir | 
1 | 每个数据目录的恢复线程数 | 多磁盘时可增加 | |
auto.create.topics.enable | 
true | 是否允许自动创建 Topic | 生产建议禁用 | |
controlled.shutdown.enable | 
true | 优雅关闭 Broker | 建议开启 | |
delete.topic.enable | 
true | 是否允许删除 Topic | 生产慎用 | |
auto.leader.rebalance.enable | 
true | 是否自动均衡 Leader | 建议开启 | |
leader.imbalance.check.interval.seconds | 
300 | 检查 leader 失衡间隔 | 与上配合使用 | |
leader.imbalance.per.broker.percentage | 
10 | 触发 leader 重平衡的阈值 | 默认即可 | |
| 🧱 副本与复制机制 | default.replication.factor | 
1 | 新 Topic 默认副本数 | 生产建议 3 | 
offsets.topic.replication.factor | 
1 | 消费组偏移主题副本数 | 建议 3 | |
transaction.state.log.replication.factor | 
1 | 事务状态主题副本数 | 建议 3 | |
transaction.state.log.min.isr | 
1 | 事务状态日志最小 ISR 数 | 建议 2 | |
min.insync.replicas | 
1 | Leader 写入时要求的最小 ISR 副本数 | 建议 replication.factor - 1 | 
|
unclean.leader.election.enable | 
false | 是否允许非同步副本选为 leader | 生产建议 false | |
num.replica.fetchers | 
1 | follower 拉取线程数 | 可提升复制性能 | |
replica.fetch.max.bytes | 
1048576 (1MB) | follower 拉取单分区最大数据量 | 增大可提速 | |
replica.fetch.response.max.bytes | 
10485760 (10MB) | follower 一次拉取响应总量 | 可调大 | |
replica.fetch.wait.max.ms | 
500 | follower 等待新数据的最大时长 | 延迟与吞吐折中 | |
replica.fetch.backoff.ms | 
1000 | 拉取失败后退避时间 | 网络不稳时调整 | |
replica.socket.timeout.ms | 
30000 | follower 与 leader 通信超时 | ≥ fetch.wait.ms | |
replica.socket.receive.buffer.bytes | 
65536 | 拉取 socket 缓冲区 | 调大可提速 | |
replica.lag.time.max.ms | 
10000 | follower 落后 leader 的最大时间 | 影响 ISR | |
replica.high.watermark.checkpoint.interval.ms | 
5000 | 高水位写入 checkpoint 周期 | 影响恢复速度 | |
replica.selector.class | 
- | 自定义副本选择类 | 一般保持默认 | |
| 🧮 日志与段文件 | log.segment.bytes | 
1073741824 (1GB) | 单日志段文件大小 | 调小便于删除 | 
log.segment.ms | 
604800000 (7天) | 强制滚动日志的时间 | 适用于时间控制 | |
log.retention.hours | 
168 | 日志保留时间(小时) | 与磁盘空间相关 | |
log.retention.bytes | 
-1 | 日志总大小限制 | -1 表示不限制 | |
log.retention.check.interval.ms | 
300000 | 检查日志保留策略间隔 | 默认即可 | |
log.cleaner.enable | 
true | 是否启用日志压缩 | compact 主题需启用 | |
log.cleaner.threads | 
1 | 清理线程数 | 大集群可增加 | |
log.cleaner.io.max.bytes.per.second | 
None | 限制清理 IO 带宽 | 控制磁盘负载 | |
log.flush.interval.messages | 
Long.MAX_VALUE | 累计消息数达到后强制 flush | 通常保持默认 | |
log.flush.interval.ms | 
None | 每隔多久强制 flush | SSD 可调大 | |
num.partitions | 
1 | 新 Topic 默认分区数 | 通常 3~6 起步 | |
| 🧵 生产与消费相关 | message.max.bytes | 
1048576 | 允许的最大消息大小 | 与 Producer max.request.size 对齐 | 
replica.fetch.max.bytes | 
1048576 | 与 Producer/Consumer 对应的限制 | 防止大消息卡死 | |
compression.type | 
producer | 压缩算法(none, gzip, snappy, lz4, zstd) | 建议 zstd | |
queued.max.requests | 
500 | Broker 最大排队请求数 | 默认即可 | |
| 🛠️ 控制器与协调器 | controller.socket.timeout.ms | 
30000 | 控制器通信超时 | 默认即可 | 
controller.quorum.voters | 
- | KRaft 模式选举成员 | ZK 模式不需 | |
controller.listener.names | 
- | 控制器监听名 | ZK 模式忽略 | |
| 📈 监控与指标 | metric.reporters | 
空 | 指标上报类 | 可接 Prometheus | 
metrics.num.samples | 
2 | 指标采样数 | 默认即可 | |
metrics.sample.window.ms | 
30000 | 指标采样窗口 | 默认即可 | |
replica.fetchers.metrics.enabled | 
true | 是否启用副本拉取指标 | Kafka 3.x 新增 | |
| 🔒 安全 | authorizer.class.name | 
空 | 授权类实现 | 开启 ACL 时配置 | 
super.users | 
空 | 超级用户列表 | ACL 模式下配置 | |
ssl.keystore.location | 
- | SSL 证书路径 | 启用 SSL 时使用 | |
ssl.truststore.location | 
- | 信任证书路径 | 启用 SSL 时使用 | 
参数使用建议总结
| 场景 | 推荐配置 | 
|---|---|
| 高可靠性集群 | default.replication.factor=3, min.insync.replicas=2, unclean.leader.election.enable=false | 
| 吞吐优先 | 提高 num.replica.fetchers、replica.fetch.max.bytes | 
| 快速恢复 | 减少 replica.high.watermark.checkpoint.interval.ms | 
| 节省磁盘 | 启用 log.cleaner.enable 并设置 log.retention.hours | 
| 事务或精确一次语义 | 设置 transaction.state.log.replication.factor=3、transaction.state.log.min.isr=2 |