写点什么

大数据 -79 Kafka 监控从入门到实战:度量体系、JMX 采集与可视化告警全流程 Prometheus、Kafka Eagle

作者:武子康
  • 2025-08-27
    山东
  • 本文字数:3485 字

    阅读完需:约 11 分钟

大数据-79 Kafka 监控从入门到实战:度量体系、JMX采集与可视化告警全流程 Prometheus、Kafka Eagle

点一下关注吧!!!非常感谢!!持续更新!!!

🚀 AI 篇持续更新中!(长期更新)

AI 炼丹日志-31- 千呼万唤始出来 GPT-5 发布!“快的模型 + 深度思考模型 + 实时路由”,持续打造实用 AI 工具指南!📐🤖

💻 Java 篇正式开启!(300 篇)

目前 2025 年 08 月 18 日更新到:Java-100 深入浅出 MySQL 事务隔离级别:读未提交、已提交、可重复读与串行化 MyBatis 已完结,Spring 已完结,Nginx 已完结,Tomcat 已完结,分布式服务正在更新!深入浅出助你打牢基础!

📊 大数据板块已完成多项干货更新(300 篇):

包括 Hadoop、Hive、Kafka、Flink、ClickHouse、Elasticsearch 等二十余项核心组件,覆盖离线+实时数仓全栈!大数据-278 Spark MLib - 基础介绍 机器学习算法 梯度提升树 GBDT 案例 详解


章节内容

上节我们完成了如下的内容:


  • Kafka 集群模式搭建

  • Kafka 集群模式的应用场景

  • 实机云服务器搭建


Kafka 监控度量指标详解

度量指标系统架构

Kafka 采用两套度量指标系统来满足不同组件的监控需求:


  1. Yammer Metrics:主要应用于 Kafka 服务器端(broker)和 Scala 客户端

  2. 成熟稳定的度量库,提供丰富的度量类型

  3. 支持多种输出方式,包括 JMX、CSV、SLF4J 等

  4. Kafka Metrics:专为 Java 客户端设计的内置度量系统

  5. 减少对外部库的依赖,避免传递依赖问题

  6. 专门针对 Kafka 客户端场景优化

指标公开方式

JMX 接口

  • 所有度量指标都通过 JMX(Java Management Extensions)公开

  • 可通过标准的 JMX 客户端(如 JConsole、VisualVM)查看

  • 指标路径组织为层次结构,例如:


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

可插拔的报告系统

Kafka 支持配置多种统计报告器,包括但不限于:


  • JMX 报告器(默认启用)

  • CSV 报告器(定期将指标写入 CSV 文件)

  • Graphite 报告器(推送到 Graphite 监控系统)

  • Prometheus 报告器(通过 HTTP 端点暴露指标)

关键监控指标示例

Broker 端重要指标

  1. 消息吞吐量

  2. MessagesInPerSec:入站消息速率

  3. MessagesOutPerSec:出站消息速率

  4. 请求处理

  5. RequestHandlerAvgIdlePercent:请求处理线程空闲率

  6. ProduceRequestMetrics:生产请求延迟

  7. 副本同步

  8. UnderReplicatedPartitions:未充分复制的分区数

  9. ReplicaFetcherMetrics:副本同步延迟

客户端重要指标

  1. 生产者指标

  2. record-send-rate:记录发送速率

  3. request-latency-avg:请求平均延迟

  4. 消费者指标

  5. records-consumed-rate:记录消费速率

  6. fetch-latency-avg:拉取请求延迟

监控集成实践

典型的监控集成步骤:


  1. 配置 Kafka 启用所需的报告器

  2. 设置报告间隔(通常 30 秒-1 分钟)

  3. 将报告器连接到监控系统(如 Prometheus、Datadog)

  4. 配置告警规则(如处理延迟超过阈值)


示例配置片段:


# 启用JMX报告metrics.reporters=jmx# 配置Graphite报告器metrics.reporters=com.example.graphite.GraphiteReportermetrics.graphite.host=graphite.example.commetrics.graphite.port=2003metrics.graphite.prefix=kafka.prod
复制代码

JMX

export KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote \                       -Dcom.sun.management.jmxremote.port=9999 \                       -Dcom.sun.management.jmxremote.authenticate=false \                       -Dcom.sun.management.jmxremote.ssl=false \                       -Djava.rmi.server.hostname=${服务器的IP,尽量写IP,不要hostname或者域名}"
复制代码


接着我们启动 Kafka:


kafka-server-start.sh /opt/servers/kafka_2.12-2.7.2/config/server.properties
复制代码

JConsole

在本机上启动 jconsole 服务,我们运行如下指令:(本机要有 JDK)



启动窗口如下图所示:



我们输入 Kafka 的地址和端口:



连接成功之后页面如下图:



我们选择 MBean 选项卡:



可以看到对应的数据情况:


详细监控指标

http://kafka.apache.org/10/documentation.html#monitoring

OS 监控项

Broker 指标

Producer 和 Topic 指标

Consumer 指标

获取监控指标

我们可以通过编程的方式来获取到 Kafka 的指标信息:


编写代码

public class JMXMonitorDemo {
public static void main(String[] args) throws Exception { String jmxServiceUrl = "service:jmx:rmi:///jndi/rmi://h121.wzk.icu:9999/jmxrmi"; JMXServiceURL jmxUrl = null; JMXConnector jmxc = null; MBeanServerConnection jmxs = null; ObjectName mbeanObjectName = null; Iterator sampleIter = null; Set sampleSet = null;
// 创建JMXServiceURL 对象 jmxUrl = new JMXServiceURL(jmxServiceUrl); // 建立指定的URL服务器的连接 jmxc = JMXConnectorFactory.connect(jmxUrl); // 返回代表远程MBean服务器的MBeanServiceConnection对象 jmxs = jmxc.getMBeanServerConnection(); // 根据传入的字符串,创建ObjectName对象 mbeanObjectName = new ObjectName("kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec"); // 指定ObjectName对应的MBeans sampleSet = jmxs.queryMBeans(null, mbeanObjectName); // 迭代器 sampleIter = sampleSet.iterator(); if (!sampleSet.isEmpty()) { // 如果返回了 则打印信息 while (sampleIter.hasNext()) { ObjectInstance sampleObject = (ObjectInstance) sampleIter.next(); ObjectName objectName = sampleObject.getObjectName(); // 查看指定MBean指定属性的值 String count = jmxs.getAttribute(objectName, "Count").toString(); System.out.println("count: " + count); } } // 关闭 jmxc.close(); }}
复制代码

运行测试

控制台输出结果如下:


Kafka Eagle

我们可以使用 kafka-eagle 管理 Kafka 集群。

核心模块

  • 面板可视化

  • 主题管理,包含创建主题、删除主题、主题列举、主题配置、主题查询

  • 消费者应用:对不同消费者应用进行监控,包含 KafkaAPI、FlinkAPI、SparkAPI、StormAPI、FlumeAPI、LogStashAPI 等等

  • 集群管理:包含对 Kafka 集群和 ZooKeeper 集群的详情展示,其内容包含 Kafka 启动时间、Kafka 端口号、ZooKeeperLeader 角色等。同时,还有多集群切换管理,ZooKeeperClient 操作入口

  • 集群监控:包含对 Broker、Kafka 核心指标、ZooKeeper 核心指标进行监控,并绘制历史趋势图

  • 告警功能:对消费者应用数据积压情况进行告警,以及对 Kafka 和 ZooKeeper 监控度进行告警,同时,支持邮件、微信、钉钉告警通知

  • 系统管理:包含用户创建、用户角色分配、资源访问进行管理

整体架构

  • 可视化:负责展示主题列表、集群健康、消费应用等

  • 采集器:数据采集的来源包含 ZooKeeper、Kafka JMX & 内部 Topic、KafkaAPI(2.x 以后版本)

  • 数据存储:目前 Kafka Eagle 存储采用 MySQL 或 SQLite,数据库和表的创建均是自动完成的,按照官方文档配置好即可,启动 Kafka Eagle 就会自动创建,用来存储元数据和监控数据

  • 监控:负责见消费者应用消费情况,集群健康状态

  • 告警:对监控到的异常进行告警通知,支持邮件、微信、钉钉等方式

  • 权限管理:对访问用户进行权限管理,对于管理员、开发者、访问者等不同角色的用户,分配不用的访问权限

下载项目

# Github 地址# https://github.com/smartloli/EFAK
wget https://github.com/smartloli/kafka-eagle-bin/archive/v3.0.1.tar.gzmv v3.0.1.tar.gz kafka-eagle-v3.0.1.tar.gztar -zxvf kafka-eagle-v3.0.1.tar.gzcd kafka-eagle-bin-3.0.1/tar -zxvf efak-web-3.0.1-bin.tar.gzmv efak-web-3.0.1/ /opt/servers/
复制代码


下载过程如下图所示:



整理好的项目如下所示:


配置项目

cd /opt/servers/efak-web-3.0.1
复制代码


修改配置文件


vim conf/system-config.properties
复制代码


文件按照自己的需要修改,我这里修改了部分:


efak.zk.cluster.alias=cluster1cluster1.zk.list=h121.wzk.icu:2181,h122.wzk.icu:2181,h123.wzk.icu:2181####################################### kafka sqlite jdbc driver address######################################efak.driver=org.sqlite.JDBCefak.url=jdbc:sqlite:/hadoop/kafka-eagle/db/ke.dbefak.username=rootefak.password=www.kafka-eagle.org
# 我注释掉了MySQL
复制代码


此时我们需要新建一个文件夹:


mkdir -p /hadoop/kafka-eagle/db/
复制代码

环境变量

vim /etc/profile
# efakexport KE_HOME=/opt/servers/efak-web-3.0.1export PATH=$PATH:$KE_HOME/bin
复制代码


启动服务

./bin/ke.sh start
复制代码


启动我们的服务,如下图所示:


访问服务

http://h121.wzk.icu:8048
admin123456
复制代码


运行结果如下图所示:



打开之后,填写账号密码:




发布于: 刚刚阅读数: 3
用户头像

武子康

关注

永远好奇 无限进步 2019-04-14 加入

Hi, I'm Zikang,好奇心驱动的探索者 | INTJ / INFJ 我热爱探索一切值得深究的事物。对技术、成长、效率、认知、人生有着持续的好奇心和行动力。 坚信「飞轮效应」,相信每一次微小的积累,终将带来深远的改变。

评论

发布
暂无评论
大数据-79 Kafka 监控从入门到实战:度量体系、JMX采集与可视化告警全流程 Prometheus、Kafka Eagle_Java_武子康_InfoQ写作社区