当前位置: 首页 > article >正文

基于JMX实现消息队列监控

引言

实时监控中间件保障集群的可用性是极其重要的,本篇文章以JAVA语音基于JMX来实现对Kafka消息队列的监控

实现

添加依赖

在 pom.xml 中添加以下依赖:

<dependencies>
    <!-- Kafka 客户端依赖 -->
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>3.4.0</version>
    </dependency>
    <!-- JMX 依赖 -->
    <dependency>
        <groupId>javax.management</groupId>
        <artifactId>javax.management-api</artifactId>
        <version>1.4.0</version>
    </dependency>
</dependencies>

Java实现

import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import java.util.Set;

public class KafkaPerformanceMonitor {

    private static final String JMX_URL = "service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi";

    public static void main(String[] args) {
        try {
            // 连接到 JMX 服务器
            JMXServiceURL url = new JMXServiceURL(JMX_URL);
            JMXConnector connector = JMXConnectorFactory.connect(url);
            MBeanServerConnection mbeanServerConnection = connector.getMBeanServerConnection();

            // 获取所有 MBean 的名称
            Set<ObjectName> mbeanNames = mbeanServerConnection.queryNames(null, null);

            // 遍历 MBean 名称,查找 Kafka 相关的 MBean
            for (ObjectName mbeanName : mbeanNames) {
                if (mbeanName.getDomain().startsWith("kafka")) {
                    System.out.println("Found Kafka MBean: " + mbeanName);
                    // 获取 MBean 的属性
                    Set<String> attributeNames = mbeanServerConnection.getMBeanInfo(mbeanName).getAttributes().stream()
                           .map(attr -> attr.getName())
                           .collect(java.util.stream.Collectors.toSet());
                    for (String attributeName : attributeNames) {
                        try {
                            Object attributeValue = mbeanServerConnection.getAttribute(mbeanName, attributeName);
                            System.out.println("  Attribute: " + attributeName + " = " + attributeValue);
                        } catch (Exception e) {
                            System.err.println("Error getting attribute " + attributeName + " for MBean " + mbeanName + ": " + e.getMessage());
                        }
                    }
                }
            }

            // 关闭连接
            connector.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
  • JMX 连接:通过 JMXServiceURL 和 JMXConnectorFactory 连接到 Kafka 的 JMX 服务器。这里假设 Kafka 的 JMX 服务运行在本地的 9999 端口,你需要根据实际情况修改 JMX_URL
  • 获取 MBean 信息:使用 MBeanServerConnection 查询所有的 MBean 名称,并筛选出 Kafka 相关的 MBean。
  • 获取属性值:对于每个 Kafka 相关的 MBean,获取其所有属性的名称,并尝试获取属性的值进行打印。
  • 异常处理:在获取属性值时,可能会抛出异常,需要进行异常处理。

http://www.kler.cn/a/530933.html

相关文章:

  • MySQL锁详解
  • C++底层学习预备:模板初阶
  • 在 Ubuntu 中使用 Conda 创建和管理虚拟环境
  • Python线程入门:多线程并发的基础与实践
  • 【C语言】结构体对齐规则
  • 冯·诺依曼体系结构
  • 动手学深度学习-3.2 线性回归的从0开始
  • 【数据结构-Trie树】力扣648. 单词替换
  • Kafka流式计算架构
  • Linux——进程间通信之SystemV共享内存
  • (回溯递归dfs 电话号码的字母组合 remake)leetcode 17
  • OpenCV4.8 开发实战系列专栏之 30 - OpenCV中的自定义滤波器
  • html中的列表元素
  • 全域旅游景区导览系统小程序独立部署
  • 使用冒泡排序模拟实现qsort函数
  • NeetCode刷题第20天(2025.2.1)
  • STM32 DMA+AD多通道
  • 音标-- 02-- 重音 音节 变音
  • 2024美团秋招硬件开发笔试真题及答案解析
  • Day33【AI思考】-分层递进式结构 对数学数系的 终极系统分类
  • C++:结构体和类
  • 刷题记录 动态规划-5: 62. 不同路径
  • python的pre-commit库的使用
  • leetcode——从前序与中序遍历序列构造二叉树(java)
  • stm32小白成长为高手的学习步骤和方法
  • NOTEPAD++编写abap