操作手册 · 大数据运维

待环境验证

Kafka KRaft 仲裁、元数据日志与控制面巡检

区分 KRaft 投票成员、发现地址与功能级别,通过有限仲裁采样和元数据日志趋势判断控制面健康,明确多数派、节点身份及停止维护的条件。

Kafka大数据
阅读导引 · 理解后再操作

这篇知识解决什么问题

按实际 voter、功能级别和日志进度判断 KRaft 控制面,先算清维护后是否仍有多数派,再讨论节点身份与恢复。

仲裁分母来自已提交成员

用当前投票成员总数 N 计算 floor(N/2)+1,离线成员不会自动降低门槛;broker 与 observer 不补足投票多数。

版本、发现入口与成员身份分别核对

二进制版本不等于 finalized feature,动态 bootstrap 地址不等于 voter 列表;联合 kraft.version、CurrentVoters、node ID 与 directory ID 判断。

进入文章正文
关联架构图解7 个组件 · 点击展开

借用 Kafka 4.1 场景图中的 KRaft Controller、broker 和观测链路定位责任。图已展示控制面,却未展开真实投票成员与元数据复制日志,法定多数及共享故障域需由现场清单补齐。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

Kafka KRaft 指标与消费积压观测架构

将 broker 数据面、KRaft 控制面和消费组积压分层取证,经受限 JMX 指标链路形成看板;独立查询补齐积压来源与监控盲区。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

Kafka KRaft 指标与消费积压观测架构:组件关系图将 broker 数据面、KRaft 控制面和消费组积压分层取证,经受限 JMX 指标链路形成看板;独立查询补齐积压来源与监控盲区。 KRaft Controller → Kafka Broker:元数据控制;Kafka Broker → JMX Exporter:Broker MBean;KRaft Controller → JMX Exporter:控制面 MBean;JMX Exporter → Prometheus:指标响应;Prometheus → Grafana:查询结果;Kafka Broker → 消费组只读查询:消费位点证据;消费组只读查询 → 值班核验:积压独立核对;Grafana → 值班核验:看板与异常线索。箭头说明见下方流向解读。
Kafka 4.1 KRaft 逻辑参考图;监控端点、角色部署和消费组采集仍待目标环境验证,不表示已有全量监控。

Kafka Broker

服务组件

承载消息分区与复制,暴露对应版本和角色的 MBean;不把所有消费组积压假定为 broker JMX 固有指标。

查看关联工具
全部组件职责 7 个组件
Kafka Broker
承载消息分区与复制,暴露对应版本和角色的 MBean;不把所有消费组积压假定为 broker JMX 固有指标。工具介绍 Kafka Broker
JMX Exporter
按版本映射选定 MBean 到受限 HTTP 指标端点,避免为接入监控开放不安全的远程 JMX。工具介绍 JMX Exporter
Prometheus
限制抓取频率和高基数标签,分别识别端点失败、关键指标缺失与真实业务异常。工具介绍 Prometheus
KRaft Controller
管理元数据与集群控制决策;独立或混合角色由现场确认,broker 数不等于 controller 数。工具介绍 KRaft Controller
Grafana
从已核验数据源展示请求、复制和控制面状态,空数据与正常零值分别提示。工具介绍 Grafana
消费组只读查询
按批准范围读取 offset 与 lag;无提交位点等不可计算状态保留为未知,独立采集服务未验证前不画成已接入。
值班核验
交叉核对查询、看板及既有通知链路,记录模拟规则测试与真实故障演练的区别。
流向解读 8 条连接
  1. 1

    KRaft Controller Kafka Broker

    控制 / 管理 · 元数据控制

    表达 KRaft 对 broker 的控制关系,不是业务消息传输路径。

  2. 2

    Kafka Broker JMX Exporter

    观测 / 查询 · Broker MBean

    从 broker 进程读取经筛选的 JMX 指标。

  3. 3

    KRaft Controller JMX Exporter

    观测 / 查询 · 控制面 MBean

    图中合并表达各进程的 agent,不表示跨进程共享一个 Java agent。

  4. 4

    JMX Exporter Prometheus

    观测 / 查询 · 指标响应

    Prometheus 主动向受限端点发起抓取,exporter 返回指标;箭头表示指标响应方向。

  5. 5

    Prometheus Grafana

    观测 / 查询 · 查询结果

    看板查询已验证规则与指标,保留实例和角色标签。

  6. 6

    Kafka Broker 消费组只读查询

    观测 / 查询 · 消费位点证据

    通过受限消费组查询取得指定对象的状态,不重置 offset。

  7. 7

    消费组只读查询 值班核验

    观测 / 查询 · 积压独立核对

    人工对照或未来经验证采集均需说明来源,本图不假设自动接入。

  8. 8

    Grafana 值班核验

    观测 / 查询 · 看板与异常线索

    由值班人结合测试时间线核验告警触发和恢复,不以看板存在代表通知已送达。

故障域与操作边界

监控接入不能损害多数派

需要重启挂载 agent 时遵守滚动窗口、ISR 和 controller 多数约束,不并行重启整个集群。

消费积压有独立来源

broker JMX、客户端指标与消费组查询覆盖范围不同;未知位点或缺失采集不能填成零。

指标端口同样需要保护

只允许批准来源,按需要启用认证与加密;不把远程 JMX 默认配置当成生产安全配置。

架构依据与版本核对 2 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

适用范围与版本基线

本文面向 Kafka 4.1 KRaft 集群,先通过只读证据判断控制面是否具有可用多数派、日志是否收敛,再决定是否进入节点维护流程。4.1 是本文参考基线,不表示当前最新版本。命令要求使用与集群相容的发行包和经过配置的认证文件;本文不执行任何集群操作,验证状态为 PENDING。

记录 broker、controller、CLI 的具体版本,以及节点 ID、控制器监听器、机架、磁盘和元数据目录。现有 Kafka 集群监控场景 已展示 KRaft 控制面与观测关系,但没有展开实际投票成员及其元数据复制日志,不能从图中的单个 controller 方框推断真实成员数。

多数派解决什么问题

KRaft controller 通过复制元数据日志协调集群元数据,其中一个担任 active controller。投票成员的多数派决定仲裁能力:三个投票成员可容忍一个不可用,五个可容忍两个;增加 broker 或 observer 不会增加投票多数派。若三个 controller 共用一个存储故障域,进程分布并没有提供三个独立故障域。

controller 处理元数据,broker 承载业务分区日志。元数据仲裁丢失时,部分已有读写可能暂时继续,但依赖元数据变更、注册和故障接管的行为会受影响。因此应分别报告“数据面样本仍可用”和“控制面不能安全推进”,不能用一次生产成功覆盖控制面告警。KRaft 运维说明

静态与动态成员配置先分清

二进制版本和已生效的 feature level 是两份证据。Kafka 4.1 支持静态仲裁向动态仲裁升级,但升级二进制不会自动完成所有 feature 升级。读取 kraft.version:缺失或 FinalizedVersionLevel 为 0 表示静态仲裁,达到 1 表示动态仲裁;metadata.version 是另一项功能级别,不应混写。

静态仲裁用 controller.quorum.voters 描述投票成员。动态仲裁用 controller.quorum.bootstrap.servers 提供发现入口,入口地址列表不等于当前投票成员列表。应把配置文件、feature 状态和运行时 CurrentVoters 三者核对,而不是只数配置行中的地址。发现入口不可达也可能是监听器、证书或 ACL 问题,不能直接判断所有 controller 已宕机。

一次有限的只读采样

以下用一个已知 broker 管理入口采集,不遍历所有节点。先在终端设置实际 KAFKA_BOOTSTRAP 和受控认证文件路径 KAFKA_ADMIN_CONFIG,文件应限定请求与 API 超时,例如 10 秒请求、30 秒 API 预算。两项 CLI 均只执行一次;工具进程若超过约定总预算应中止并保留错误,不以无限重试替代定位。

bin/kafka-metadata-quorum.sh \
  --bootstrap-server "$KAFKA_BOOTSTRAP" \
  --command-config "$KAFKA_ADMIN_CONFIG" describe --status
bin/kafka-metadata-quorum.sh \
  --bootstrap-server "$KAFKA_BOOTSTRAP" \
  --command-config "$KAFKA_ADMIN_CONFIG" describe --replication

记录 ClusterId、LeaderId、LeaderEpoch、HighWatermark、CurrentVoters 和 CurrentObservers,再按成员比较日志末端、复制差距和最近追赶时间。不要复制包含凭据的配置文件到巡检附件。若改用 --bootstrap-controller,必须使用实际 controller 监听器及对应认证,不能把 broker 端口机械替换成一个惯用端口。

如何解释日志进度

HighWatermark 表示已提交元数据进度,成员日志末端反映其已复制进度。单次差距不能说明趋势:在预先约定的窗口追加两次采样,结合当时真实的元数据变更量判断是否追赶。业务平稳、没有元数据变化时,高水位不增长本身不是故障;有待处理变更且提交延迟持续增长时才需要沿控制面继续查。

将 raft-metrics 的角色、当前 leader、epoch、提交延迟、选举延迟,与 controller 事件队列等待和处理时间对齐。Exporter 字段名取决于映射规则,先核对原始 JMX 指标及角色,不把 observer 的状态解释为丢失投票权。多个节点同时出现延迟,应优先关联共享磁盘、网络和进程停顿证据;单节点持续落后再缩小到该成员。Kafka 4.1 监控指标

节点维护需要保住身份与日志

在动态仲裁中,节点 ID、directory ID 和运行时成员身份都需要记录。更换磁盘不是“同一个 ID 启动即可”,新 controller 应先完成日志追赶,再按对应版本流程纳入投票成员。本文不提供 add-controller、remove-controller 或 format 的通用生产命令,因为它们改变恢复条件,需要实际拓扑和变更方案。

计划停止一个成员前,以当前已提交的投票成员总数 N 计算法定多数 floor(N/2)+1,再检查停机后仍健康且互通的成员数是否满足。暂时离线不会降低门槛:五名 voter 已有两名离线时仍需三名,不能把健康三名重算为多数两名。上一次维护尚未恢复追赶,或其他成员间歇不可达时,应停止下一步。combined broker/controller 模式把两种角色的维护故障域绑在一起,关键环境的容量与滚动维护不能按独立部署假定。

常见误区与危险恢复动作

  • 把 topic ISR 当作 KRaft 投票成员。 ISR 服务业务分区复制,不能据此判断元数据仲裁。可联读 分区与消费诊断,但两份证据分别验收。
  • 看到 ActiveControllerCount 为 1 就宣告健康。 本地角色只是时点信息,还要验证多数派通信、日志进度和请求效果。
  • 落后就清空目录重新 format。 格式化会破坏原有元数据恢复输入;多数成员带空日志启动尤其危险。先保护原盘、集群身份和日志,禁止把格式化当作修复延迟的方法。
  • 所有非 ISR 选主都等于不安全选举。 Kafka 4.1 新集群默认启用 ELR,ELR 与 unclean leader election 的资格规则不同;它属于业务分区可用性机制,仍不能补足 KRaft 多数派。ELR 官方说明

验收、停止与回退

首轮验收需保存实际投票成员、身份、故障域、leader 稳定性和同窗日志趋势,并能解释至少一个管理请求与一个业务读写样本的结果。有限观测只能证明该窗口,不应宣称已覆盖任意断电、网络分区或磁盘损坏。

多数派不确定、身份冲突、日志缺口无法解释或原始元数据副本不足时,停止滚动变更并进入事故恢复流程。只读采样的回退是结束采集;已改变成员或 feature 的环境不能靠复制旧配置保证回退,应按该版本支持路径与现有提交历史单独制定恢复方案。保留未知项和实测恢复时间,不填造成功记录。

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. 业务分区仍可读写,但管理请求和节点注册持续失败。

    只读核对
    对齐仲裁状态、实际 voter 通信与 controller 事件队列时间线。
    如何判读
    数据面局部可用不能证明控制面具有提交与故障接管能力。
  2. 元数据 HighWatermark 在多个采样点保持不变。

    只读核对
    检查同窗是否真实存在待处理元数据变更,并比对 leader、epoch 和提交延迟。
    如何判读
    没有变更时静止可能正常;有积压时才沿日志复制与控制器处理继续定位。
  3. 计划维护一个 controller,已有其他 voter 不稳定。

    只读核对
    按已提交成员总数计算法定多数,核验停机后健康且互通的成员数及故障域。
    如何判读
    不满足门槛时停止维护,不能拿剩余健康数量重新定义多数。
常见误区与判断边界 2 项

把分区 ISR 当成仲裁成员

ISR 描述业务分区复制;KRaft voter 描述元数据仲裁,两者分开采集和验收。

格式化原盘修复落后

format 破坏原有元数据恢复输入。先保护身份和日志,再按具体版本处理成员替换。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 保存实际版本、kraft.version、ClusterId 与当前投票成员身份。
  • 记录成员共享故障域和维护后的多数派计算。
  • 保留有限日志进度、leader 稳定性与管理请求时间窗。
  • 列出停止维护条件、原始日志保护位置与尚未验证的恢复缺口。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。