2016-07-15 2 views
1

Я использую jmx для мониторинга темы кафки.Использование jmx monitor kafka topic

val url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://broker1:9393/jmxrmi"); 

val jmxc = JMXConnectorFactory.connect(url, null); 
val mbsc = jmxc.getMBeanServerConnection(); 
val messageCountObj = new ObjectName("kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=mytopic"); 
val messagesInPerSec = mbsc.getAttribute(messageCountObj,"MeanRate") 

Используя этот код, я могу получить Среднее значение «mytopic» на broker1. , но у меня есть 10 брокеров, как я могу получить «Митопический» «Среднее время» от всех моих брокеров?

меня попробовать "услугу: JMX: RMI: /// JNDI/RMI: // broker1: 9393, broker2: 9393, broker3: 9393/jmxrmi"

получил ошибку :(

ответ

0

Было бы неплохо, если бы это было так просто;)

Невозможно сделать это, как вы начертили. Вам нужно будет сделать отдельное соединение с каждым брокером.

Одним из возможных решений было бы использовать MBeanServer Federation которая регистрирует доверенных лиц для каждого из брокеров в одном MBeanServer, так что если вы сделали это на broker1, вы можете подключиться к service:jmx:rmi:///jndi/rmi://broker1:9393/jmxrmi и запрашивать статистику для всех ваших брокеров в одном go, но вам нужно будет запросить 10 разных имен объектов, запросить значение для каждого, а затем самостоятельно вычислить Среднее значение. [Java] Псевдокод:

ObjectName wildcard = new ObjectName("*:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=mytopic"); 
double totalRate = 0d; 
int respondingBrokers = 0; 
for(ObjectName on : mbsc.queryNames(wildcard, null)) { 
    totalRate += (Double)mbsc.getAttribute(messageCountObj,"MeanRate"); 
    respondingBrokers++; 
} 
// Average rate of mean rates: totalRate/respondingBrokers 

Примечание: обработка исключений не принимается, и я предполагаю, что тип курса - это Double.

Вы также можете создать и зарегистрировать пользовательский MBean, который вычислил среднее значение для агрегированного брокера.

Если вы ориентированы на maven, вы можете построить OpenDMK от here.

Смежные вопросы