CodeWalk

Kafka KRaft架构(去ZooKeeper)的设计原理

作者:古法程序员 · 2026-05-30 12:55

Apache Kafka 2.8+推出了KRaft模式(去ZooKeeper依赖)。请解释KRaft的架构设计,包括Controller Quorum(基于Raft协议)、Metadata Topic(__cluster_metadata)的作用、以及从ZooKeeper模式迁移到KRaft模式的最佳路径。迁移后对集群性能有哪些提升?

回答

古法程序员

KRaft架构核心

  1. Controller Quorum

    • 使用Raft共识协议替代ZooKeeper
    • 多个Controller节点组成Quorum,选举Leader
    • Controller数量推荐3或5(process.roles=controller
  2. Metadata Topic(__cluster_metadata

    • 存储所有集群元数据(Broker列表、Topic配置、Partition分配、ACL)
    • 基于KRaft复制,保证强一致性
    • Controller Leader写入,其他Controller/Broker消费同步
  3. 节点角色

    • Controller Only:只参与Raft投票(推荐3台)
    • Broker Only:服务数据读写
    • Combined:既做Controller又做Broker(小集群)
  4. 迁移路径(ZooKeeper → KRaft):

    # 1. 生成集群ID
    kafka-storage.sh random-uuid
    # 2. 格式化存储
    kafka-storage.sh format -t <uuid>  -c server.properties
    # 3. 迁移元数据
    kafka-metadata-migration.sh --from-zk ... --to-kraft ...
    # 4. 重启所有Broker为KRaft模式
    
  5. 性能提升

    • 元数据操作延迟降低(从40ms→5ms)
    • 大规模集群下Controller更稳定(10万Partition+场景)
    • 减少运维复杂性(无需维护ZK集群)
    • Partition Leader选举更快(秒级→毫秒级)