获取没有客户端id的kafka主题度量

rks48beu  于 2021-06-06  发布在  Kafka
关注(0)|答案(1)|浏览(472)

我尝试使用jmx收集kafka主题度量,以便将它们打包到java中的对象中。kafka文档显示mbean需要客户机id,但是我们的系统中没有设置任何客户机id。
让我相信,在没有客户机id的情况下获取主题级度量是可能的,因为我们的kafka管理器服务示例能够提取主题度量。我找到了他们用的mbean "kafka.server:name=MessagesInPerSec,topic=topic,type=BrokerTopicMetrics" 试图用它却没有结果。
我现在的代码是

try {
   JMXServiceURL target = new 
   JMXServiceURL("service:jmx:rmi:///jndi/rmi://KAFKA_URL:9999/jmxrmi");
   JMXConnector connector = JMXConnectorFactory.connect(target);
   MBeanServerConnection remote = connector.getMBeanServerConnection();
   String beanName = "kafka.server:name=MessagesInPerSec,topic=topicName,type=BrokerTopicMetrics";
   ObjectName bean = new ObjectName(beanName);
   MBeanInfo info = remote.getMBeanInfo(bean);
   LOGGER.info(info.getDescription());
   MBeanAttributeInfo[] attributes = info.getAttributes();
   for (MBeanAttributeInfo attr : attributes) {
      LOGGER.info("^C " + attr.getName() + " " + remote.getAttribute(bean,attr.getName()));
   }
   connector.close();
}
catch(Exception e) {
   LOGGER.info(e.getMessage());
}

我已经能够通过这种方法获得常规的代理级别的度量,当我尝试深入到单个主题度量时,我失去了输出。谢谢!

x0fgdtte

x0fgdtte1#

上面粘贴的代码对我很有用,它正确地打印了该代理的指定主题的度量。但是请注意,如果代理没有托管指定主题的任何分区(或副本),您将得到 InstanceNotFoundException 回来。
检索mbean名称的一种简单方法是 jconsole . 您可以浏览这些度量,一旦找到所需的度量,就可以在“属性”下面的“操作”项中获得其名称。
否则使用 queryNames() 方法来查找所有可用的 ObjectName 他在街上 MBeanServerConnection :

Set<ObjectName> names = remote.queryNames(null, null);

相关问题