基于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实现

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 连接 :通过 JMXServiceURLJMXConnectorFactory 连接到 Kafka 的 JMX 服务器。这里假设 Kafka 的 JMX 服务运行在本地的 9999 端口,你需要根据实际情况修改 JMX_URL
  • 获取 MBean 信息 :使用 MBeanServerConnection 查询所有的 MBean 名称,并筛选出 Kafka 相关的 MBean。
  • 获取属性值:对于每个 Kafka 相关的 MBean,获取其所有属性的名称,并尝试获取属性的值进行打印。
  • 异常处理:在获取属性值时,可能会抛出异常,需要进行异常处理。
相关推荐
踢球的打工仔16 分钟前
PHP面向对象(5)
android·java·php
Rover.x18 分钟前
错误:找不到或无法加载主类 @C:\Users\AppData\Local\Temp\idea_arg_file223456232
java·ide·intellij-idea
4***172720 分钟前
使用 java -jar 命令启动 Spring Boot 应用时,指定特定的配置文件的几种实现方式
java·spring boot·jar
CoderYanger36 分钟前
优选算法-字符串:63.二进制求和
java·开发语言·算法·leetcode·职场和发展·1024程序员节
3***312137 分钟前
java进阶1——JVM
java·开发语言·jvm
FeiHuo565151 小时前
微信个人号开发中如何高效实现API二次开发
java·开发语言·python·微信
源码技术栈1 小时前
什么是云门诊系统、云诊所系统?
java·vue.js·spring boot·源码·门诊·云门诊
Coder-coco1 小时前
游戏助手|游戏攻略|基于SprinBoot+vue的游戏攻略系统小程序(源码+数据库+文档)
java·vue.js·spring boot·游戏·小程序·论文·游戏助手
Qiuner1 小时前
Spring Boot 机制二:配置属性绑定 Binder 源码解析(ConfigurationProperties 全链路)
java·spring boot·后端·spring·binder
D***77652 小时前
适用于IntelliJ IDEA 2024.1.2部署Tomcat的完整方法,以及笔者踩的坑,避免高血压,保姆级教程
java·tomcat·intellij-idea