性能优化 · 大数据运维

待环境验证

Kafka 消费积压与副本健康只读诊断

联查消费组提交位点、分区分配、ISR 和 Broker 指标,识别消费端处理瓶颈、分区倾斜、重平衡与复制风险。

Kafka大数据监控告警高可用
阅读导引 · 理解后再操作

这篇知识解决什么问题

Kafka 积压分析要先确定读到的是哪个位点、哪个分区和哪种消费者协议,再把处理进度、组成员变化与副本健康分开。阅读时重点建立同窗口的分区证据,识别少数热分区、共享下游和 Broker 风险,避免把 Lag 归零误写成业务无损完成。

位点差不是业务完成量

提交位点、消费者当前位置与外部业务成功进度并不相同,计数来源与提交时机必须先登记。压缩、事务和记录大小也限制了用 offset 差推算消息量或清空时间的可靠性。比较看板和 CLI 时先校准来源及采样时间,而不是一见数字不同就判断采集出错。

把组稳定性与数据冗余并列观察

成员反复变化、处理时长和下游错误用于解释消费进度,ISR、请求错误与节点资源用于解释副本和服务风险。两者可能共享故障原因,也可能独立发生。应按分区和时间对照,不能因为 Lag 高就调整 Broker,更不能用降低保护条件去消除冗余告警。

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

参考图以 Kafka 4.1 KRaft 展示 Broker、Controller 指标和独立消费组查询的不同来源;正文命令以 4.0 为基准,需核对现场版本。图未展开生产者、每个消费者和业务下游,不能把 JMX 链路当成全部消费进度。

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

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 消费积压告警与副本健康异常的第一轮只读诊断,示例参考 Apache Kafka 4.0 的命令行接口。实际执行前核对客户端与 Broker 版本、消费组协议、ACL 和部署拓扑;3.x 的 ZooKeeper 集群不要照搬 KRaft 控制面步骤。JMX Exporter 的 Prometheus 指标名称由映射规则决定,本文使用 Kafka 原始指标语义,不假定所有环境具有相同的指标名。内容尚未在目标集群验证。

前提与采样范围

确认集群标识、Bootstrap 地址、Topic、消费组、业务负责人和延迟目标。使用已有只读管理凭据文件,不在命令行明文传递 SASL 密码,不打印文件内容。这里只允许描述元数据和消费位点,不启动新消费者、不重置 offset、不改副本分配。运行前把以下占位符替换为核准值;CLI 应来自受控版本目录。

OPS_KAFKA_BIN='/REPLACE_WITH_KAFKA_HOME/bin'
OPS_BOOTSTRAP='REPLACE_WITH_BROKER:9093'
OPS_CLIENT_CONFIG='/REPLACE_WITH_READONLY_CLIENT_PROPERTIES'
OPS_GROUP='REPLACE_WITH_CONSUMER_GROUP'
OPS_TOPIC='REPLACE_WITH_TOPIC'

读取只覆盖目标消费组和 Topic,故障高峰不批量遍历全部集群。命令超时或权限不足应记录并停止扩大调用范围,不临时授予写权限。

第一步:确定 Lag 的来源与口径

"$OPS_KAFKA_BIN/kafka-consumer-groups.sh" \
  --bootstrap-server "$OPS_BOOTSTRAP" --command-config "$OPS_CLIENT_CONFIG" \
  --describe --group "$OPS_GROUP" --offsets

保存每个分区的 CURRENT-OFFSETLOG-END-OFFSETLAG 和时间戳。按既有监控周期复查同一组,不把一次输出作为趋势。这里的提交位点不同于应用已完成外部业务处理的进度;客户端预取、提交时机和事务隔离也会影响解释。无已提交位点、无活跃成员或权限错误应单独标记,不能转成 Lag 为零。

如果看板使用消费者 JMX 的 records-lag-max,它基于消费者当前位置而不是已提交位点,与消费组 CLI 的 Lag 不是同一个口径。先记录看板指标来源和 exporter 映射,不能把两个数字不一致直接判断为监控故障。Kafka 消费者监控说明 明确了这一区别。

将分区位点变化与业务处理速率、事件产生时间和下游完成时间关联。Offset 差值不等于精确业务消息数,压缩、事务和记录大小使按条数推算等待时间存在误差。若粗估清空时间,只在吞吐稳定、净消化速率为正且口径一致时估算,并给出假设,不能承诺某个时间一定追平。

第二步:核对组状态、成员与分区分配

"$OPS_KAFKA_BIN/kafka-consumer-groups.sh" \
  --bootstrap-server "$OPS_BOOTSTRAP" --command-config "$OPS_CLIENT_CONFIG" \
  --describe --group "$OPS_GROUP" --state
"$OPS_KAFKA_BIN/kafka-consumer-groups.sh" \
  --bootstrap-server "$OPS_BOOTSTRAP" --command-config "$OPS_CLIENT_CONFIG" \
  --describe --group "$OPS_GROUP" --members --verbose

核对故障期间是否反复变更成员、分区是否集中在少量消费者、是否存在空闲实例。描述命令之间并非原子快照,发生重平衡时应保留各自采样时间。Kafka 基本运维指南 说明这些读取方式及消费组权限差异。

只有一个分区持续增长时,先关联该分区的数据倾斜、单条异常、下游键竞争和被分配实例的日志。所有分区同时增长时,关注共享下游瓶颈、发布变更与组协调器异常。消费者数量超过可分配分区数不会自动增加每个分区的并行度,不能仅凭 Lag 高就扩大实例数量。

第三步:检查客户端处理与重平衡证据

从现有应用监控读取消费速率、处理时长、错误率、重试、提交失败和下游延迟,再与消费者 CPU、GC、线程阻塞关联。查看实际消费配置的受控副本,重点确认提交方式、max.poll.interval.msmax.poll.records 与所用组协议。

如果业务处理阻塞了下一次 poll,可能触发组成员变化;盲目延长超时只会改变故障发现速度,不会提升处理能力。经典协议与新消费组协议的心跳、会话参数归属不同,不能把一组参数作为所有版本通用处方。参数边界见 Kafka Consumer Configs。正文只要求核对,不在排障过程中修改它们。

第四步:把消费积压与副本风险分开

"$OPS_KAFKA_BIN/kafka-topics.sh" \
  --bootstrap-server "$OPS_BOOTSTRAP" --command-config "$OPS_CLIENT_CONFIG" \
  --describe --topic "$OPS_TOPIC"

逐分区核对 Leader、Replicas 和 ISR,记录离线副本或持续缩小的 ISR。与现有监控中的 UnderReplicatedPartitionsUnderMinIsrPartitionCountOfflineReplicaCount 以及 ISR 变化关联;同时比较 Produce/Fetch 错误、请求时延和磁盘状态。ISR 不足是数据冗余风险,不等价于某个消费组 Lag 增长,二者可能有共同的 IO 或网络原因,也可能独立发生。Kafka 监控文档 给出这些指标的原始含义。

不要把某 Broker 上未暴露的指标填为零,也不要在事故中临时开放未认证 JMX。若副本健康恶化,优先保护数据冗余与可用性,暂停扩分区、重分配和滚动升级等并发变更。

第五步:按证据形成判断分支

  • Lag 增长、成员稳定、ISR 正常、下游时延升高:以消费处理链为主线,定位具体依赖与批次,不先操作 Broker。
  • Lag 集中在少数分区:检查分区负载与成员映射,评估数据分布和处理串行限制;扩分区会影响路由语义,须单独设计。
  • 成员反复变化且有超时或提交失败:关联应用发布、GC、网络和轮询节奏,保留完整时间线后再决定配置调整。
  • Lag 与 Fetch 错误、ISR 缩小、设备时延同步发生:交由 Broker 和基础设施负责人联合调查。
  • CLI 与看板结论矛盾:核对 exporter 抓取时间、标签、重启归零及提交位点口径,先排除观测问题。

对 KRaft 集群,如果已有控制面告警,还需只读核对 Controller 的成员、领导者和仲裁进度。控制面检查依据实际版本的 KRaft 运维指南,不在此流程调整投票成员或格式化存储。

验收、停止与恢复边界

验收同时关注业务端到端时延、各分区积压趋势、消费组稳定性与副本健康,连续观察窗口由业务峰谷决定。仅 Lag 归零不证明没有重复处理或业务副作用;需要用应用侧幂等键或审计结果补证据。若必须重放、调整 offset、重启或变更副本,另开变更单,写明起止位点、可能重复或跳过的数据、业务批准人及回退方式。

本手册禁止执行 offset reset、删除 Topic、改变 min.insync.replicas 或开启非正常选主以消除告警。出现数据不可读、持续缩减 ISR 或诊断请求明显增加控制面压力时,停止扩大查询并升级处置。只读诊断没有数据恢复动作;已发生的新业务写入无法通过简单恢复一个消费位点撤销。

案例证据记录模板

  • 事件编号、集群和版本、Topic/组标识、消费协议、时间窗口:待填。
  • 分区 Lag 与提交进度、成员映射、重平衡和业务完成率:待填。
  • 同窗口 ISR、Broker 错误、资源和下游依赖证据:待填。
  • 假设、反证、数据重复或丢失风险、仍未知信息:待填。
  • 授权处置负责人、验收窗口与复查结果:待填,禁止预填成功。

相关站内内容

参考资料

从现象到判断

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

  1. 消费组 CLI 与看板 Lag 明显不同,或者某些分区没有提交位点,却被汇总图显示为零,业务方对完成进度存疑。

    只读核对
    读取目标组分区位点与采样时间,核对看板指标的原始来源、exporter 映射和客户端当前位置或提交口径。
    如何判读
    不同位点口径可以产生合理差异;未知或不可计算项不能补零,外部业务是否完成仍需独立应用证据。
  2. 只有少数分区积压持续扩大,其他分区较平稳,组内有实例空闲或某个成员伴随下游慢请求与重试。

    只读核对
    查看该组现有成员及分区映射,关联目标分区的位点趋势、处理日志和下游时延,保留各次非原子查询的时间。
    如何判读
    优先调查分区倾斜、单条处理或成员瓶颈;增加消费者不自动提高同一分区并行度,仍需具体负载证据。
  3. 积压与 Fetch 错误同时出现,ISR 持续缩小或存在离线副本,Broker 磁盘和网络指标也在相近窗口异常。

    只读核对
    只读核对目标 Topic 的 Leader、Replicas 和 ISR,关联已有 Broker 请求、设备及控制面告警,不重分配副本或改位点。
    如何判读
    这类组合需要联合调查数据面和基础设施;副本风险不能化约成消费性能问题,证据恶化时应暂停扩大变更。
常见误区与判断边界 2 项

通过重置 offset 把积压归零

改变消费位点会改变后续处理范围,可能跳过未完成业务或重复已产生外部效果的记录,不是只读诊断动作。Lag 数字变小不能撤销业务副作用。任何重放或跳过方案都应单独写清起止位点、幂等约束、业务批准人和不可逆边界。

把全部版本的组协议参数混用

经典与新消费组协议的心跳和会话参数归属不同,客户端与 Broker 版本也影响工具行为。应先阅读实际配置与协议,不能以统一超时处方覆盖所有服务。延长等待可能只推迟故障发现,无法替代应用处理吞吐和下游依赖的定位。

交接时应留下的证据

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

  • 登记集群、客户端与 Broker 版本、Topic、消费组和协议,保存只读凭据文件引用与实际查询范围,不输出凭据正文。
  • 按分区保留多个采样点的提交、末端位点和成员映射,说明 CLI 与看板口径及采样差,未知值明确注明原因。
  • 关联处理耗时、提交失败、成员变化和下游完成证据,再附同窗口 ISR、请求错误与资源趋势,区分消费和冗余风险。
  • 交接支持与反证、可能重复或跳过的数据边界以及下一步负责人,任何 offset 调整、重放或副本变更均另列授权要求。

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

继续阅读与资料核对

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

返回原理导读

DOUYA OPS ECOSYSTEM

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

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