Kafka 去 Zookeeper 化的背景
Kafka 早期依赖 Zookeeper 管理集群元数据(如 Broker 注册、Topic 分区信息等)。随着版本迭代,社区提出 KIP-500 方案,通过自研的 KRaft 协议(基于 Raft 共识算法)替代 Zookeeper,以简化架构、提升性能并降低运维复杂度。
迁移前的准备工作
集群兼容性检查
- 确认 Kafka 版本 ≥ 3.3.1(生产环境建议 ≥ 3.5.0),并启用 KRaft 模式。
- 检查现有 Broker 配置(如
zookeeper.connect参数)是否可动态调整。
元数据备份与验证
- 使用
kafka-metadata-quorum.sh工具导出当前 Zookeeper 元数据。 - 通过
kafka-dump-log.sh验证元数据完整性,确保无损坏或丢失的分区信息。
新集群拓扑规划
- 设计 KRaft 控制节点(Controller)的部署方案:至少 3 个 Controller 节点以实现高可用。
- 规划 Broker 与 Controller 的分离部署(混合模式仅适用于测试环境)。
配置调整示例
# KRaft 模式配置示例
process.roles=broker,controller
controller.quorum.voters=1@controller1:9093,2@controller2:9093,3@controller3:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
inter.broker.listener.name=PLAINTEXT
上线后的运维要点
监控与告警配置
- 监控 KRaft 集群状态:
kafka-metadata-quorum.sh --bootstrap-server <broker>:9092 describe --status - 关键指标包括:
LeaderEpoch变化频率HighWatermark延迟- Controller 节点的 CPU/内存使用率
滚动升级策略
- 先升级 Controller 节点,再升级 Broker 节点。
- 每次重启后通过
EndToEndLatency指标验证性能稳定性。
故障处理场景
- Controller 节点宕机:
- 自动触发 Raft 选举,需确保
quorum.voters配置覆盖所有候选节点。
- 自动触发 Raft 选举,需确保
- 元数据不一致:
- 使用
kafka-metadata-shell.sh手动修复(需社区工具支持)。
- 使用
性能调优建议
- 调整
metadata.log.max.record.bytes控制元数据日志大小。 - 优化
controller.quorum.election.timeout.ms避免频繁选举。
注意事项
- Zookeeper 依赖的旧客户端(如 2.4.0 之前的 Kafka Clients)需升级以兼容 KRaft 模式。
- 迁移期间建议在测试环境验证所有 Admin API(如
createTopics)的行为一致性。
1万+

被折叠的 条评论
为什么被折叠?



