`

通过rmi来调用kafka里的jmx信息

阅读更多

 kafka的官方文档上,已经列出了所有的mxbean,链接:http://kafka.apache.org/documentation.html#monitoring

通过jconsole也能看到。

 

 

 

package com.wxj.kafka.monitor.jmx;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

import javax.management.JMX;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

import com.yammer.metrics.reporting.JmxReporter;

/**
 * 通过rmi来调用kafka里的jmx信息
 * @author root
 *
 */
public class JMX1
{

	public static void main(String[] args)
	{
		try
		{
			String rmiAddress = "192.168.199.131:9999";
			HashMap<String, Object> prop = new HashMap<String, Object>();
			JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://" + rmiAddress + "/jmxrmi");
			JMXConnector conn = JMXConnectorFactory.connect(url, prop);
			MBeanServerConnection mbsc = conn.getMBeanServerConnection();
			
			
			printAllTopicsBytesInPerSec(mbsc);
			
			//printAllTopicsBytesOutPerSec(mbsc);
			
			//printMBeans(mbsc);

		} catch (Exception e)
		{
			e.printStackTrace();
		}

	}

	private static void printAllTopicsBytesOutPerSec(MBeanServerConnection mbsc) throws MalformedObjectNameException
	{
		String name = "\"kafka.server\":type=\"BrokerTopicMetrics\",name=\"AllTopicsBytesOutPerSec\"";
		ObjectName mbeanName = new ObjectName(name);
		
		JmxReporter.MeterMBean meterMBean = JMX.newMBeanProxy(mbsc, mbeanName, JmxReporter.MeterMBean.class);
		System.out.println(meterMBean.getCount() + "," + meterMBean.getEventType() + "," + meterMBean.getFifteenMinuteRate()
				+ meterMBean.getFiveMinuteRate() + "," + meterMBean.getMeanRate() + "," + meterMBean.getOneMinuteRate() + 
				"," + meterMBean.getRateUnit());
	}

	private static void printAllTopicsBytesInPerSec(MBeanServerConnection mbsc) throws MalformedObjectNameException
	{
		String name = "\"kafka.server\":type=\"BrokerTopicMetrics\",name=\"AllTopicsBytesInPerSec\"";
		ObjectName mbeanName = new ObjectName(name);
		
		JmxReporter.MeterMBean meterMBean = JMX.newMBeanProxy(mbsc, mbeanName, JmxReporter.MeterMBean.class);
		System.out.println(meterMBean.getCount() + "," + meterMBean.getEventType() + "," + meterMBean.getFifteenMinuteRate()
				+ meterMBean.getFiveMinuteRate() + "," + meterMBean.getMeanRate() + "," + meterMBean.getOneMinuteRate() + 
				"," + meterMBean.getRateUnit());
	}

	/**
	 * 打印所有的mxbean
	 * @param mbsc
	 * @throws IOException
	 */
	private static void printMBeans(MBeanServerConnection mbsc) throws IOException
	{
		Set MBeanset = mbsc.queryMBeans(null, null);
		System.out.println("MBeanset.size() : " + MBeanset.size());
		Iterator MBeansetIterator = MBeanset.iterator();
		while (MBeansetIterator.hasNext())
		{
			ObjectInstance objectInstance = (ObjectInstance) MBeansetIterator.next();
			System.out.println(objectInstance.getObjectName());
		}
	}

}

 



 

 



 

  • 大小: 495 KB
  • 大小: 77 KB
  • 大小: 648 KB
  • 大小: 569.3 KB
分享到:
评论

相关推荐

    使用RMI远程连接JVM.用JMX获取JVM的参数

    然后,客户端通过RMI连接到服务器的JMX代理,使用JMX API来查询或操作MBean。例如,你可以获取内存使用情况、线程状态、垃圾回收器信息等。在实际应用中,这有助于进行性能监控、故障排查和资源优化。 在开发过程中...

    利用RMI异步调用

    - **注册表**:RMI注册表是一个服务,用于将远程对象的引用与名称关联起来,使得客户端可以通过名称查找并调用远程对象。 2. **RMI异步调用原理**: - 异步调用通常涉及到回调或未来(Future)对象的概念。客户端...

    xmemcached1.3.5源码-附带自己写的RMI调用它的JMX服务

    xmemcached1.3.5源码-附带自己写的RMI调用它的JMX服务,使用RMI调用JMX服务的详细过程,完整的eclipse工程,直接导入即可用。还用一些运行截图,很有用。 自己写的例子,类名是BaseExample 和RMITest.

    jmx三种访问方式

    通过JMX,开发者可以创建管理代理(MBeans),这些代理暴露了各种管理特性,使得系统管理员可以通过JMX API来监控和操作。本文将深入探讨JMX的三种访问方式:HTTP页面方式、VM参数方式和RMI方式。 ### HTTP页面方式...

    RMI远程调用代码及使用方法

    通过RMI,开发者可以在一台计算机上编写一个类,并在另一台计算机上调用该类的方法,就如同在本地调用一样。 #### 二、RMI基础知识 在深入理解给定示例之前,我们首先简要介绍一些RMI的基础概念: 1. **接口**: 在...

    RMI远程调用

    总结来说,RMI远程调用是Java实现分布式计算的关键技术,它通过简化网络编程,使开发者能专注于业务逻辑,而非底层通信细节。结合Spring框架,可以进一步提升RMI应用的开发效率和可维护性。在实际项目中,合理利用...

    RMI远程方法调用RMI远程方法调用

    总结来说,RMI提供了一种透明的方式来调用远程对象的方法,使得开发者可以创建分布式的Java应用程序而无需深入理解网络编程的复杂性。通过RMI,可以轻松地将服务部署在多台机器上,提升系统的可扩展性和可用性。

    rmi远程调用读取文件

    在这个场景中,“rmi远程调用读取文件”指的是通过RMI机制,使得一个JVM中的程序能够请求另一个JVM上的程序读取并返回文件内容。这种方式在分布式系统中非常常见,可以用于数据共享、文件服务等应用。 RMI的基本...

    java rmi远程调用

    最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程

    jboss远程调用JMX

    当我们谈论"jboss远程调用JMX"时,我们关注的是如何通过网络从一个JMX客户端连接到运行在JBoss服务器上的JMX服务,以便进行远程管理和监控。 首先,我们需要了解JMX的基本概念。MBean是JMX的核心,它是一个Java对象...

    JMX以RMI方式连接的场景示例

    在本场景中,我们将介绍如何使用RMI(Remote Method Invocation)连接方式来实现JMX框架的各层级的连接。 MBean是JMX框架的基本组件,用于提供管理信息和功能。MBean可以是任何Java对象,只要它实现了相关的接口。...

    使用rmi进行远程调用

    这些方法的实际实现位于服务器端,而客户端通过RMI调用这些方法,就像调用本地方法一样。 创建RMI服务涉及以下步骤: 1. **定义远程接口**:定义一个继承自`java.rmi.Remote`的接口,如`BankService`,并声明可能...

    Spring-RMI (RMI调用, HTTP调用)

    Spring通过提供RMI集成,简化了RMI服务的创建和调用。以下是一些关键点: 1. **服务接口定义**:首先,你需要定义一个远程服务接口,这个接口将包含你希望在远程进程中执行的方法。 2. **服务实现**:接着,创建该...

    RMI远程过程调用

    RMI采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。它允许运行在一个Java虚拟机上的对象调用运行在另一个Java虚拟机上的对象方法,从而使编程人员可以方便地在网络环境...

    动态代理与RMI远程调用

    4. 客户端调用:客户端通过RMI服务获取远程对象的引用,然后像调用本地对象一样调用其方法。 RMI的使用步骤: 1. 定义远程接口:接口需继承`java.rmi.Remote`,并声明可能抛出`java.rmi.RemoteException`的方法。 2...

    分布式 RMI远程调用

    分布式RMI(Remote Method Invocation)远程调用是一种在分布式系统中实现对象间通信的技术,它允许一个对象在某个进程中调用另一个位于不同进程或者不同计算机上的对象的方法,从而实现跨网络的对象交互。...

    RMI实现的远程调用

    通过RMI,开发者可以透明地调用运行在其他网络节点上的对象的方法,就像它们是在本地一样。这极大地简化了分布式应用的开发,使得Java应用程序能够构建复杂的分布式系统。 RMI的核心概念包括以下几个部分: 1. **...

    jmx 实例 rmi mbean

    MBeans可以是任何Java对象,它们暴露了管理接口,使得可以通过JMX API来访问和操作。 在本实例中,我们重点关注的是如何使用Remote Method Invocation(RMI)来实现JMX的MBean管理。RMI是一种在Java平台上进行远程...

    rmi 远程调用 实现客户端之间会话

    在Java RMI中,一个JVM作为服务器,暴露远程接口,而其他JVM作为客户端,通过这些接口进行远程调用。 标题中的“rmi 远程调用 实现客户端之间会话”指的是利用RMI技术让多个客户端与同一服务端建立会话,进行交互。...

    RMI 跨平台调用的demo

    2. 创建远程对象引用:客户端并不直接操作服务器上的对象,而是通过一个远程引用(stub)来间接调用远程方法。远程引用是服务器端对象的一个代理,它在客户端创建并通过RMI注册表获取。 3. 获取远程对象:客户端通过...

Global site tag (gtag.js) - Google Analytics