3. 堆积排查前置准备:监控指标采集、Prometheus+Grafana搭建、Kafka Exporter部署
Kafka 堆积(Consumer Lag)的排查不能仅靠直觉或临时查看日志。在进入调优路径之前,必须建立一套可观测的监控体系。本章将指导你完成从指标采集、存储、可视化到 Kafka 专属 Exporter 部署的全流程,为后续的堆积根因分析打下数据基础。
3.1 监控体系架构总览
一个完整的 Kafka 堆积监控链路包含四个层次:数据源 → 采集器 → 存储与计算 → 可视化与告警。下图展示了各组件之间的协作关系:
架构要点: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
- 创建配置文件
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 端口
- 启动 Prometheus 容器:
docker run -d --name prometheus \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus:latest
- 验证:访问
http://localhost:9090/targets,确认所有 target 状态为 UP。
3.3.2 部署 Grafana
- 启动 Grafana 容器:
docker run -d --name grafana \
-p 3000:3000 \
-e GF_SECURITY_ADMIN_PASSWORD=admin \
grafana/grafana:latest
- 配置数据源:登录 Grafana(默认 admin/admin),进入 Configuration → Data Sources → Add data source,选择 Prometheus,URL 填写
http://localhost:9090,点击 Save & Test。 - 导入仪表盘:推荐使用 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 的部署与验证。
- 建立了验证清单,确保监控链路可用。