繁体   English   中英

获取没有客户端ID的kafka主题指标

[英]Get kafka topic metrics without client-ID

我正在尝试使用JMX收集kafka主题指标,以便可以将它们打包到Java对象中。 Kafka文档显示MBean需要一个客户端ID,但是我们的系统中未设置任何客户端ID。

使我相信无需客户端ID即可获取主题级别指标的原因是,我们的Kafka Manager服务实例能够提取主题指标。 我发现他们使用"kafka.server:name=MessagesInPerSec,topic=topic,type=BrokerTopicMetrics"的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());
}

通过这种方法,我已经能够获得常规的经纪人级别指标,而当我尝试深入了解各个主题指标时,我会失去输出。谢谢!

您上面粘贴的代码对我有用,它为该代理正确打印了指定主题的指标。 但是请注意,如果代理未托管指定主题的任何分区(或副本),则将返回InstanceNotFoundException

检索MBean名称的一种简单方法是使用jconsole 您可以浏览指标,找到所需指标后,即可在“属性”下方的“操作”项中获取其名称。

否则,使用queryNames()方法在MBeanServerConnection上找到所有可用的ObjectName

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM