3. 堆积排查前置准备:监控指标采集、Prometheus+Grafana搭建、Kafka Exporter部署

Kafka 堆积(Consumer Lag)的排查不能仅靠直觉或临时查看日志。在进入调优路径之前,必须建立一套可观测的监控体系。本章将指导你完成从指标采集、存储、可视化到 Kafka 专属 Exporter 部署的全流程,为后续的堆积根因分析打下数据基础。

3.1 监控体系架构总览

一个完整的 Kafka 堆积监控链路包含四个层次:数据源 → 采集器 → 存储与计算 → 可视化与告警。下图展示了各组件之间的协作关系:

Kafka 堆积监控体系架构图 Kafka 堆积监控体系架构 Kafka Broker Kafka Consumer JMX MBeans 指标:BytesIn/Out, RequestTime 指标:Consumer Lag, Offset 指标:GC, 线程, 内存 Kafka Exporter (独立进程 / JMX Exporter) Prometheus (时序数据库) Grafana Dashboard Alertmanager 采集协议 Broker: /metrics Consumer: /metrics JMX: jmx_exporter
架构要点:Kafka Exporter 是连接 Kafka 集群与 Prometheus 的桥梁。它从 Broker 和 Consumer 的 JMX 或内置指标端点拉取数据,转换为 Prometheus 可识别的格式。Grafana 负责将时序数据以仪表盘形式呈现,便于快速定位堆积趋势。

3.2 关键监控指标清单

在部署之前,需要明确哪些指标对堆积排查至关重要。下表列出了核心指标及其在堆积分析中的作用:

指标类别 指标名称 Prometheus 查询示例 堆积排查用途
堆积核心 Consumer Lag kafka_consumergroup_lag 直接反映堆积深度,按消费组和分区查看
堆积核心 Offset 差值 kafka_consumergroup_current_offset 对比生产与消费偏移量,判断堆积趋势
生产端 Bytes In / Sec rate(kafka_broker_bytes_in_total[1m]) 判断是否因生产流量突增导致堆积
消费端 消费速率 rate(kafka_consumergroup_current_offset[1m]) 评估消费能力是否匹配生产速率
Broker 请求队列大小 kafka_network_request_queue_size Broker 是否过载,影响整体吞吐
系统 GC 暂停时间 rate(jvm_gc_pause_seconds_sum[1m]) Consumer 或 Broker 的 GC 停顿导致消费停滞
注意:不要只关注 Lag 绝对值。Lag 的变化速率比瞬时值更重要。如果 Lag 持续增长,即使当前值不大,也意味着消费能力不足;如果 Lag 稳定,则可能是生产速率与消费速率匹配。

3.3 Prometheus + Grafana 搭建步骤

以下步骤基于 Linux 环境,使用 Docker Compose 快速部署。生产环境建议使用 Kubernetes 或独立部署。

3.3.1 部署 Prometheus

  1. 创建配置文件 prometheus.yml:
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'kafka-exporter'
    static_configs:
      - targets: ['localhost:9308']  # Kafka Exporter 默认端口
  - job_name: 'kafka-broker'
    static_configs:
      - targets: ['localhost:7071']  # Broker JMX Exporter 端口
  1. 启动 Prometheus 容器:
docker run -d --name prometheus \
  -p 9090:9090 \
  -v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus:latest
  1. 验证:访问 http://localhost:9090/targets,确认所有 target 状态为 UP。

3.3.2 部署 Grafana

  1. 启动 Grafana 容器:
docker run -d --name grafana \
  -p 3000:3000 \
  -e GF_SECURITY_ADMIN_PASSWORD=admin \
  grafana/grafana:latest
  1. 配置数据源:登录 Grafana(默认 admin/admin),进入 Configuration → Data Sources → Add data source,选择 Prometheus,URL 填写 http://localhost:9090,点击 Save & Test。
  2. 导入仪表盘:推荐使用 ID 7589(Kafka Exporter Dashboard)或 10466(Kafka 集群监控),直接通过 Import 功能加载。
快速验证:在 Grafana 的 Explore 页面执行查询 kafka_consumergroup_lag{consumergroup="your-group"},如果返回时序数据,说明链路已打通。

3.4 Kafka Exporter 部署与配置

Kafka Exporter 是堆积监控的核心组件。它通过连接 Kafka 集群的 kafka-consumer-groups 协议,主动拉取每个消费组的偏移量和 Lag 信息。

3.4.1 部署方式

推荐使用官方镜像 danielqsj/kafka-exporter:latest,通过 Docker 部署:

docker run -d --name kafka-exporter \
  -p 9308:9308 \
  danielqsj/kafka-exporter:latest \
  --kafka.server=localhost:9092 \
  --kafka.version=2.8.0 \
  --web.listen-address=:9308

参数说明:

  • --kafka.server:Kafka Broker 地址,多个用逗号分隔。
  • --kafka.version:指定 Kafka 版本,确保协议兼容。
  • --web.listen-address:Exporter 监听端口,供 Prometheus 拉取。

3.4.2 验证 Exporter 指标

部署完成后,访问 http://localhost:9308/metrics,应看到类似以下输出:

# HELP kafka_consumergroup_lag Current lag for each consumer group and topic partition
# TYPE kafka_consumergroup_lag gauge
kafka_consumergroup_lag{consumergroup="my-group",topic="orders",partition="0"} 1200
kafka_consumergroup_lag{consumergroup="my-group",topic="orders",partition="1"} 850

如果指标为空,检查 Exporter 日志:docker logs kafka-exporter,常见问题包括网络不通、消费组不存在或 Kafka 版本不匹配。

3.5 监控指标采集验证清单

完成部署后,使用下表逐项验证采集是否正常:

验证项 操作 预期结果
Prometheus Target 状态 访问 /targets kafka-exporter 和 broker 均为 UP
Exporter 指标可达 curl localhost:9308/metrics 返回包含 kafka_consumergroup_lag 的文本
Grafana 数据源连通 Data Source 页面点击 Save & Test 显示 "Data source is working"
堆积指标可视化 Grafana Explore 查询 kafka_consumergroup_lag 出现时序折线图,有数据点
告警规则生效 模拟 Lag 突增(如停止消费) Alertmanager 收到告警通知
生产建议:在 Prometheus 中配置 alerting_rules.yml,设置 Lag 阈值告警。例如:当 kafka_consumergroup_lag > 10000 持续 5 分钟时触发 Warning,超过 50000 触发 Critical。这能让你在堆积恶化前主动介入。

3.6 本章小结

至此,你已经完成了堆积排查的前置准备工作:

  • 理解了监控体系的分层架构(数据源 → Exporter → Prometheus → Grafana)。
  • 掌握了 6 个核心堆积相关指标及其 PromQL 查询方式。
  • 通过 Docker 完成了 Prometheus、Grafana 和 Kafka Exporter 的部署与验证。
  • 建立了验证清单,确保监控链路可用。