简述借助 OTel JMX Metric Gatherer 在 ClickStack 中监控 Apache Kafka 的性能指标。包含演示数据集和预置仪表盘。
与现有 Kafka 部署集成
前置条件
- 正在运行的 ClickStack 实例
- 已启用 JMX 的现有 Kafka 安装 (版本 2.0 或更高)
- ClickStack 与 Kafka 之间的网络连通性 (JMX 端口 9999,Kafka 端口 9092)
- OpenTelemetry JMX Metric Gatherer JAR (下载说明见下文)
1
获取 ClickStack API key
JMX Metric Gatherer 会将数据发送到 ClickStack 的 OTLP 端点,而该端点需要身份验证。- 在你的 ClickStack URL 中打开 HyperDX (例如
http://localhost:8080) - 如有需要,创建账户或登录
- 前往 Team Settings → API Keys
- 复制你的 摄取 API key
- 将其设置为环境变量:
2
3
4
使用 Docker Compose 部署 JMX Metric Gatherer
本示例展示了一个包含 Kafka、JMX Metric Gatherer 和 ClickStack 的完整配置。请调整服务名称和端点,使其与现有部署保持一致:service:jmx:rmi:///jndi/rmi://kafka:9999/jmxrmi- JMX 连接 URL (使用你的 Kafka 主机名)otel.jmx.target.system=kafka- 启用 Kafka 专用指标http://clickstack:4318- OTLP HTTP 端点 (使用你的 ClickStack 主机名)authorization=\${CLICKSTACK_API_KEY}- 用于身份验证的 API key (必需)service.name=kafka,kafka.broker.id=broker-0- 用于过滤的资源属性10000- 采集间隔 (毫秒,10 秒)
5
在 HyperDX 中验证指标
登录 HyperDX,确认指标正在持续写入:- 进入 Chart Explorer
- 搜索
kafka.message.count或kafka.partition.count - 指标应每 10 秒出现一次
kafka.message.count- 已处理的消息总数kafka.partition.count- 分区总数kafka.partition.under_replicated- 集群健康时应为 0kafka.network.io- 网络吞吐量kafka.request.time.*- 请求延迟百分位数
在 Kafka 容器内运行 Kafka 客户端命令 (如 kafka-topics、kafka-console-producer 等) 时,请在命令前加上
unset JMX_PORT &&,以避免 JMX 端口冲突。演示数据集
1
下载样本指标数据集
下载预先生成的指标文件 (29 小时的 Kafka 指标,包含逼真的变化模式) :- 06:00-08:00:早间流量上升 - 流量从夜间基线快速攀升
- 10:00-10:15:限时闪购 - 流量骤增至正常水平的 3.5 倍
- 11:30:部署事件 - 消费者滞后激增至 12 倍,并出现副本不足的分区
- 14:00-15:30:购物高峰 - 流量持续维持在基线的 2.8 倍
- 17:00-17:30:下班后高峰 - 出现第二波流量峰值
- 18:45:消费者再平衡 - 再平衡期间滞后激增至 6 倍
- 20:00-22:00:晚间回落 - 流量快速下降至夜间水平
2
3
仪表盘与可视化
1
仪表盘配置
2
导入预置仪表盘
- 打开 HyperDX,进入“仪表盘”部分
- 点击右上角省略号菜单中的 Import Dashboard
- 上传
kafka-metrics-dashboard.json文件,然后点击 Finish Import
3
查看仪表盘
仪表盘创建完成后,所有可视化都将预先配置好:对于演示数据集,请将时间范围设置为 2025-11-05 16:00:00 - 2025-11-06 16:00:00 (UTC) (请根据你的本地时区调整) 。导入后的仪表盘默认不会指定时间范围。
故障排查
HyperDX 中没有显示任何指标
身份验证错误
Authorization failed 或 401 Unauthorized:
- 在 HyperDX UI 中检查 API key (Settings → API Keys → Ingestion API Key)
- 重新导出并重启:
Kafka 客户端命令的端口冲突
unset JMX_PORT &&:
网络连通性问题
Connection refused:
请确认所有容器都连接到同一个 Docker 网络:
后续步骤
- 为关键指标设置告警 (如分区副本不足、消费者滞后增加、请求延迟突增)
- 针对特定场景创建更多仪表盘 (如按 topic 划分的吞吐量、消费者组监控)
- 通过添加具有唯一
kafka.broker.id资源属性的额外 JMX Metric Gatherer 实例,监控多个 Kafka 消息代理