首页/数据/数据工程与 ETL 速查/集群 Controller 与元数据管理
Kafka64 条

集群 Controller 与元数据管理

Controller 是集群的“大脑”:负责分区 Leader 选举、主题创建删除、副本状态维护。ZooKeeper 模式与 KRaft 模式的区别在于元数据的存储与选举方式。

Controller 是什么

Controller 是 Kafka 集群的「大脑」,负责分区 Leader 选举、主题创建与删除、副本状态维护、ISR 收缩等元数据层面的决策。它本身也是集群里的一个 broker,只是额外承担这些职责。ZooKeeper 模式下 controller 通过 ZK 选举产生、元数据存放在 ZK 中;KRaft 模式(Kafka 3.3 起生产可用)取消了 ZK,由 controller quorum 通过 Raft 协议自行复制元数据日志。集群级的疑难问题,第一个该看的就是 controller 的状态。

基本信息

适用版本ZooKeeper 模式:Kafka 2.x 及更早为主流;KRaft:3.3+ 生产可用
核心职责Leader 选举、主题与分区管理、副本状态协调
ZK 模式控制器经 ZK 选举产生,元数据存 ZooKeeper
KRaft 模式controller quorum 通过 Raft 维护元数据日志

典型使用场景

  • 日常巡检:确认 controller 是否频繁切换、元数据 quorum 是否稳定
  • 主题创建或删除异常时,先翻 controller 日志找根因
  • 大量分区同时触发选主时,判断是元数据问题还是 broker 批量掉线
  • 从 ZooKeeper 模式迁移到 KRaft 前的 quorum 规模与节点规划
  • 元数据规模增长时评估 controller 节点是否需要独立部署

KRaft 元数据 quorum 检查

KRaft 元数据 quorum 检查
kafka-metadata-quorum.sh --bootstrap-server localhost:9092 describe --status        # 看 leader 与成员
kafka-metadata-quorum.sh --bootstrap-server localhost:9092 describe --replication   # 看各节点日志末端位移
grep -i "controller" /opt/kafka/logs/controller.log | tail -50                      # controller 侧线索
grep -iE "election|leader" /opt/kafka/logs/server.log | tail -50                    # broker 侧选主记录
# ZK 模式的等价观察:直接查 ZK 中的 controller 节点
# zookeeper-shell.sh localhost:2181 get /controller

quorum 状态字段读法

字段含义异常表现
LeaderId当前 controller leader频繁变化说明 quorum 不稳定
CurrentVoters当前投票成员列表成员缺失时容错能力下降
LastFetchTimestampleader 最近一次拉取时间长期不更新说明 follower 已落后
MaxFollowerLagfollower 落后条数持续增大预示元数据同步滞后
ActiveControllerCountbroker 侧统计的活动控制器数恒为 1 才正常,大于 1 存在脑裂风险
集群级异常(例如大量分区同时触发选主)先看 controller 日志与元数据 quorum 是否稳定,再看 broker 是否成批掉线;把顺序反过来很容易误判为磁盘或网络问题。
KRaft 集群把 controller 与 broker 混部时,controller 节点负载过高(网络抖动、磁盘延迟、CPU 抢占)会拖慢全集群的元数据操作,表现为主题创建、分区扩容、ISR 更新都变慢,而数据读写看上去正常。

易错点

  • controller 频繁切换时不先查日志就重启 broker,可能把一次选举抖动放大成全集群不可用
  • ZooKeeper 模式下 controller 与 ZK 会话超时,会导致 leader 反复易主,元数据操作间歇性失败
  • KRaft 迁移前未确认 quorum 节点数与仲裁关系,偶数节点或跨机房部署会削弱可用性
  • 把元数据规模当作可以无限扩张,主题与分区数量膨胀后 controller 处理能力会成为瓶颈

数据来源与参考

  • Apache Kafka 官方文档:Controller 与 KRaft Metadata Quorum
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌