Kafka JMX详解

Kafka 的 JMX(Java Management Extensions) 是 Kafka 监控、性能分析、容量规划、故障排查 的核心机制之一。几乎所有 Kafka 监控系统(Prometheus / Grafana / Datadog / Zabbix)底层都依赖 JMX 指标。

下面我从 架构 → 启用 → 指标体系 → 核心 MBean → 实战监控 → 优化指标 → 常见问题 全面系统讲解。


一、什么是 Kafka JMX

1️⃣ JMX 本质

JMX 是 Java 提供的:

运行时管理与监控接口标准

允许外部程序读取 JVM 内部对象的状态。

Kafka 是 Java 程序,因此:

复制代码
Kafka Broker
   ↓
JVM
   ↓
JMX MBean
   ↓
监控系统读取

2️⃣ Kafka JMX 的作用

Kafka 所有关键指标都来自 JMX,例如:

类型 示例
Broker性能 TPS、延迟
Topic吞吐 BytesIn/Out
Producer状态 请求速率
Consumer Lag 延迟消费
副本同步 ISR 状态
JVM GC、内存

二、Kafka JMX 架构

Kafka 指标结构

Kafka 使用:

复制代码
Domain + Type + Name + Tags

格式:

复制代码
kafka.<domain>:type=<Type>,name=<Metric>,<tag>=<value>

示例:

复制代码
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec

含义:

部分 说明
kafka.server 模块
BrokerTopicMetrics 指标分类
BytesInPerSec 指标名

三、如何开启 Kafka JMX(重点)

Kafka 默认支持 JMX,只需暴露端口。


方式1(推荐):环境变量启动

编辑:

复制代码
bin/kafka-server-start.sh

添加:

复制代码
export JMX_PORT=9999
export KAFKA_JMX_OPTS="
 -Dcom.sun.management.jmxremote
 -Dcom.sun.management.jmxremote.authenticate=false
 -Dcom.sun.management.jmxremote.ssl=false
"

启动:

复制代码
bin/kafka-server-start.sh config/server.properties

验证

复制代码
netstat -lntp | grep 9999

看到:

复制代码
LISTEN 0 0 :::9999

说明成功。


四、Kafka JMX 指标分类(核心)

Kafka JMX 可以分为 6 大类


1️⃣ Broker 指标(最重要)

Domain

复制代码
kafka.server

🔥 吞吐指标

复制代码
kafka.server:type=BrokerTopicMetrics
指标 含义
BytesInPerSec 写入流量
BytesOutPerSec 读取流量
MessagesInPerSec 消息TPS

👉 判断 Kafka 是否过载核心指标。


示例

复制代码
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec

属性:

复制代码
Count
MeanRate
OneMinuteRate
FiveMinuteRate

2️⃣ Request 请求指标(极其重要)

复制代码
kafka.network:type=RequestMetrics

请求延迟(关键)

复制代码
TotalTimeMs

代表:

复制代码
网络 + 队列 + 磁盘 + 处理

Kafka 延迟 = 这里。


核心请求类型:

请求 含义
Produce 写入
FetchConsumer 消费
FetchFollower 副本同步

示例:

复制代码
kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce

3️⃣ 副本同步指标(ISR健康度)

复制代码
kafka.server:type=ReplicaManager

关键指标:

指标 含义
UnderReplicatedPartitions ISR异常数量
OfflinePartitionsCount 离线分区

🔥 生产环境必须监控:

复制代码
UnderReplicatedPartitions > 0 = 故障

4️⃣ Controller 指标

复制代码
kafka.controller

关键:

指标 含义
ActiveControllerCount 当前controller数量

必须:

复制代码
= 1

否则集群异常。


5️⃣ Log & 磁盘指标

复制代码
kafka.log

关注:

指标 含义
LogFlushRateAndTimeMs flush延迟
LogFlushStats IO压力

6️⃣ JVM 指标(很多人忽略)

复制代码
java.lang

例如:

指标 含义
HeapMemoryUsage 堆使用
GarbageCollector GC时间
ThreadCount 线程数

Kafka 性能问题 80% 来自 JVM


五、最关键的 Kafka JMX 指标(生产必看)

下面是实战中真正需要监控的:

分类 指标 作用
吞吐 BytesInPerSec 写压力
吞吐 BytesOutPerSec 读压力
TPS MessagesInPerSec 消息速率
延迟 TotalTimeMs Kafka延迟
ISR UnderReplicatedPartitions 副本健康
Controller ActiveControllerCount 集群稳定
Queue RequestQueueSize 是否堵塞
IO LogFlushTimeMs 磁盘瓶颈
JVM GC Time Stop-the-world

六、如何读取 Kafka JMX

方法1:jconsole(官方)

复制代码
jconsole <ip>:9999

可直接浏览 MBean。


方法2:jmxterm(推荐)

复制代码
java -jar jmxterm.jar

连接:

复制代码
open host:9999

查看:

复制代码
beans

方法3(生产推荐):Prometheus

架构:

复制代码
Kafka
  ↓ JMX
JMX Exporter
  ↓
Prometheus
  ↓
Grafana

启动 exporter:

复制代码
java -javaagent:jmx_prometheus_javaagent.jar=7071:config.yml

Prometheus 采集:

复制代码
http://broker:7071/metrics

七、Kafka JMX 与性能优化关系(重点)

JMX = Kafka 调优依据。


1️⃣ 判断 Broker 是否瓶颈

看:

复制代码
BytesInPerSec ↑
TotalTimeMs ↑

说明:

复制代码
磁盘 or 网络瓶颈

2️⃣ 判断线程不足

看:

复制代码
RequestQueueSize

持续增长:

复制代码
num.network.threads 太小

3️⃣ 判断磁盘问题

看:

复制代码
LogFlushTimeMs ↑

说明:

复制代码
IO wait 高

4️⃣ 判断 Consumer 慢

看:

复制代码
BytesOutPerSec 低
Lag 高

八、JMX 指标命名规律(记住这个)

Kafka 指标基本遵循:

复制代码
PerSec → 速率
Ms → 延迟
Count → 总次数
Rate → 平均速率
Queue → 队列长度

九、生产环境最佳实践(经验总结)

✅ 必须做:

  1. 禁止公网暴露 JMX

  2. 使用 exporter 转 HTTP

  3. Grafana 建仪表盘

  4. 设置告警


推荐告警:

指标 阈值
UnderReplicatedPartitions >0
ActiveControllerCount ≠1
Produce TotalTimeMs >100ms
GC Time 持续升高

十、很多人不知道的高级知识(⭐)

Kafka Metrics 实际基于:

复制代码
Dropwizard Metrics

因此:

复制代码
MeanRate
1mRate
5mRate
15mRate

类似 Linux load average。


十一、Kafka JMX 总体认知图

复制代码
                Kafka Broker
                      │
                JVM Metrics
                      │
                   JMX MBeans
                      │
        ┌─────────────┼─────────────┐
   Broker        Network        Replica
                      │
                JMX Exporter
                      │
                 Prometheus
                      │
                   Grafana

✅ 一句话总结

Kafka JMX = Kafka 的"操作系统 /proc"

所有性能问题最终都能在 JMX 指标中找到证据。

相关推荐
独行侠影a5 小时前
APScheduler+Redis 分布式定时任务:解决多实例任务重复执行
数据库·redis·分布式
香菜TTT8 小时前
Kafka_深度解析_从架构原理到生产实践
分布式·架构·kafka·linq
zcmodeltech13 小时前
智能矿井沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的感知-传输-控制一体化方案
服务器·数据库·分布式·stm32·单片机·嵌入式硬件
wWYy.14 小时前
基于Raft分布式Kv存储:RPC调用
分布式·rpc
笨蛋不要掉眼泪15 小时前
RabbitMQ消息队列:SpringAMQP
java·分布式·rabbitmq
发量惊人的中年网工15 小时前
SD-WAN如何赋能工业物联网?打造工厂网络远程连接和数据传输新方案
运维·网络·分布式·物联网
java1234_小锋15 小时前
【免费】基于Spark实时金融交易风险监控与预测系统(Java版本+可视化大屏+Kafka+SpringBoot+Vue3) 锋哥原创出品,必属精品
大数据·spark·kafka·金融交易风险监控与预测
段一凡-华北理工大学15 小时前
AI推动工业智能化转型~系列文章05:特征工程:工业 AI 的第一生产力
数据库·人工智能·分布式·搜索引擎·特征工程·高炉智能化
梦想画家16 小时前
FilePulse:Kafka Connect 的“智能文件网关”,重塑数据接入新范式
kafka·文件连接器·filepulse
Devin~Y16 小时前
从本地生活电商到 AI RAG:互联网大厂 Java 面试场景完整实战
java·spring boot·redis·elasticsearch·spring cloud·kafka·rag