获取没有客户端 ID 的 kafka 主题指标
Get kafka topic metrics without client-ID
我正在尝试使用 JMX 收集 kafka 主题指标,以便我可以将它们打包到 java 中的一个对象中。 Kafka Docs 显示 MBean 需要一个客户端 ID,但是我们的系统中没有设置任何客户端 ID。
让我相信无需客户端 ID 也可以获得主题级别指标的原因是我们的 Kafka Manager 服务实例能够提取主题指标。我找到了他们使用的 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
。您可以浏览这些指标,找到您想要的指标后,您可以在 "Attributes".
正下方的 "Operations" 项中获取其名称
否则使用queryNames()
方法查找MBeanServerConnection
上所有可用的ObjectName
:
Set<ObjectName> names = remote.queryNames(null, null);
我正在尝试使用 JMX 收集 kafka 主题指标,以便我可以将它们打包到 java 中的一个对象中。 Kafka Docs 显示 MBean 需要一个客户端 ID,但是我们的系统中没有设置任何客户端 ID。
让我相信无需客户端 ID 也可以获得主题级别指标的原因是我们的 Kafka Manager 服务实例能够提取主题指标。我找到了他们使用的 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
。您可以浏览这些指标,找到您想要的指标后,您可以在 "Attributes".
否则使用queryNames()
方法查找MBeanServerConnection
上所有可用的ObjectName
:
Set<ObjectName> names = remote.queryNames(null, null);