欢迎光临
我们一直在努力

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 → 队列长度


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

✅ 必须做:

  • 禁止公网暴露 JMX

  • 使用 exporter 转 HTTP

  • Grafana 建仪表盘

  • 设置告警


  • 推荐告警:

    指标阈值
    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 指标中找到证据。

    赞(0)
    未经允许不得转载:171主机测评 » Kafka JMX详解
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址