Kafka 的 server.properties 配置项

摘要

  • 本文介绍 CentOS9 中 Kafka 的 server.properties 的配置项,基于 Zookeeper。

  • Kafka官网

  • 本文使用的 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.fetchersreplica.fetch.max.bytes
快速恢复 减少 replica.high.watermark.checkpoint.interval.ms
节省磁盘 启用 log.cleaner.enable 并设置 log.retention.hours
事务或精确一次语义 设置 transaction.state.log.replication.factor=3transaction.state.log.min.isr=2