① Controller Quorum 状态
② 操作面板
速度
③ 事件日志(最新在最上)
__cluster_metadata 元数据复制
Active Controller 接受外部请求 → 把变更追加成事件 → Raft 复制到 Quorum 多数派 → commit → Broker 拉取应用
Active Controller 上的 __cluster_metadata 日志
HW = 0 LEO = 0
Quorum Voter 同步状态
Broker 端拉取状态(Observer)
ZK 架构 vs KRaft 架构
ZooKeeper 时代
- 元数据真相在 ZK
- Controller = 某个 Broker 兼任
- 变更通过 RPC 推(O(B*P))
- Controller 切换:分钟级
- 分区上限:约 10 万
KRaft 时代
- 元数据真相在
__cluster_metadata - Controller Quorum 独立部署
- Broker 主动 fetch(拉模式)
- Active Controller 切换:< 1 秒
- 分区上限:100 万 +
关键差异速查
| 维度 | ZooKeeper 时代 | KRaft 时代 |
|---|---|---|
| 元数据存储 | ZK znode | __cluster_metadata Topic |
| 选主协议 | /controller 临时节点 | Raft |
| Controller 角色 | 某个 Broker 兼任 | 独立的 3~5 节点 Quorum |
| 变更传播 | Push (UpdateMetadata RPC) | Pull (Broker fetch) |
| Controller 故障切换 | 几十秒~几分钟 | < 1 秒 |
| 变更顺序保证 | epoch 比较打补丁 | 日志 offset 自然有序 |
| 实测分区上限 | ~10 万 | 100 万 + |
| 外部依赖 | ZooKeeper 集群 | 无 |