Kafka 的 server.properties 配置项
摘要
-
本文介绍 CentOS9 中 Kafka 的 server.properties 的配置项,基于 Zookeeper。
-
本文使用的 Kafka 版本为 3.9.1。Kafka 团队宣布 3.9 会是 最后一个还带有被弃用的 ZooKeeper 模式 的主要版本。以后版本(如 4.0)将完全弃用 ZooKeeper。
Kafka 3.x server.properties 主要配置项清单
分类 | 参数名 | 默认值 | 说明 | 推荐/备注 |
---|---|---|---|---|
🗂️ 基本信息 | 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 |