Kafka ZooKeeper 模式 vs KRaft 模式对比

6 阅读4分钟

Kafka ZooKeeper 模式 vs KRaft 模式 一页式对比表

对比维度ZooKeeper 模式(传统架构)KRaft 模式(新一代架构)
核心依赖必须部署 ZooKeeper 集群(至少 3 节点),强依赖外部协调服务无外部依赖,仅 Kafka 自身,元数据由内部 Raft 集群管理
架构复杂度高:需维护 Kafka + ZooKeeper 两套集群,部署/监控/扩容需分开操作低:仅维护 Kafka 单一套集群,所有组件统一管理
元数据存储分散存储:
1. Broker/Topic/Controller 信息 → ZooKeeper
2. 消费者偏移量 → Kafka 内部 Topic
统一存储:所有元数据(Broker/Topic/Controller/ISR)→ Kafka 内部 __cluster_metadata Topic
一致性协议依赖 ZooKeeper 的 ZAB 协议(崩溃恢复+原子广播)基于 Raft 协议(Leader 选举+日志复制),原生适配 Kafka 元数据管理
Controller 架构单节点 Controller(故障后重新选举),无集群化Controller 集群(Active/Standby 模式),多节点高可用,支持故障秒级切换
Controller 选举流程抢占式:所有 Broker 争抢创建 ZooKeeper 临时节点 /controller,创建成功者当选Raft 投票:Controller 节点间投票,获得多数派选票者成为 Active Controller
分区 Leader 选举依赖由 Controller 执行,但选举结果需写入 ZooKeeper 持久化由 Active Controller 执行,结果写入内部 __cluster_metadata Topic,无外部依赖
元数据性能低:元数据变更受 ZooKeeper 吞吐量限制,大规模集群(>100 Broker)易出现瓶颈高:元数据变更吞吐量提升 10 倍以上,支持万级 Topic/千级 Broker 大规模集群
启动/恢复速度慢:需先启动 ZooKeeper,再启动 Kafka;Controller 故障恢复需重新从 ZooKeeper 加载全量元数据快:直接启动 Kafka 即可;Controller 故障后,Standby 节点可快速接管,无需重新加载元数据
部署模式仅 Broker 角色,无独立 Controller 节点(Controller 由任意 Broker 兼任)支持两种模式:
1. 混合模式:Broker + Controller 部署在同一节点
2. 分离模式:独立 Controller 集群
核心配置项关键配置:
zookeeper.connect=zk1:2181,zk2:2181
zookeeper.session.timeout.ms=18000
关键配置:
process.roles=broker,controller
controller.quorum.voters=1@node1:9093
初始化操作无需专属初始化,启动 ZooKeeper 后直接启动 Kafka 即可需先执行初始化:
1. 生成集群 ID(kafka-storage.sh random-uuid
2. 格式化元数据目录
运维监控需监控两套集群:
1. Kafka 监控(Broker/Topic/消费)
2. ZooKeeper 监控(连接数/ZNode/Leader)
统一监控:仅需监控 Kafka 指标(Controller 状态/元数据日志/分区 Leader)
生产成熟度极高:10+年生产验证,无架构级坑点,所有 Kafka 功能全兼容中高:3.0+ 生产可用,3.5+ 稳定性大幅提升,部分老旧功能(如 MirrorMaker 1.x)暂不兼容
资源消耗高:ZooKeeper 需独立服务器/容器资源,3 节点 ZooKeeper 集群额外占用 CPU/内存/磁盘低:无额外资源消耗,Controller 节点可复用 Broker 资源(混合模式)
容器化适配性差:两套有状态服务,K8s 编排复杂度高,需处理 ZooKeeper 持久化/选举优:单套有状态服务,K8s 编排简单,仅需管理 Kafka 节点的存储和网络
适用场景1. 存量中小规模集群(< 100 Broker)
2. 对稳定性要求极高的核心业务
3. 团队熟悉 ZooKeeper 运维
1. 新项目部署(无历史包袱)
2. 大规模集群(> 100 Broker/万级 Topic)
3. 追求运维轻量化场景
故障影响范围ZooKeeper 集群不可用:
1. 消息读写正常
2. 无法创建/删除 Topic、选举 Controller/分区 Leader
Controller 集群多数派存活:集群管理完全正常;
仅少数节点故障:自动切换 Active Controller,无感知
核心优势成熟稳定、生态完善、问题排查案例丰富架构极简、性能高、恢复快、大规模友好、运维成本低
核心劣势架构复杂、元数据性能瓶颈、资源消耗高成熟度略低、部分老旧功能兼容不足、存量集群迁移需额外操作

核心结论

选型建议优先选 ZooKeeper 模式优先选 KRaft 模式
核心依据存量系统稳定运行/中小规模集群/团队熟悉 ZooKeeper新项目/大规模集群/追求运维轻量化/容器化部署
未来趋势逐步被替代,官方仅维护不新增特性官方主推方向,持续迭代优化,功能逐步完善