ошибка при попытке доступа к метрикам kafka через jmx программно - PullRequest
0 голосов
/ 11 сентября 2018

Я только начал с простого примера, чтобы прочитать метрики jmx, и использовал простые значения HeapMemoryUsage, CPUTime и т. Д., Чтобы понять это.Мне нужно попытаться получить доступ к метрикам сервера / потребителя kafka, а именно к лагу, который, как я вижу, виден как ключ в приложении jconsole под FetcherLagMetrics-ConsumerLag.Но программным путем я получаю следующую ошибку:

javax.management.InstanceNotFoundException: kafka.consumer:type=consumer- 
  fetch-manager-metrics

Это говорит мне о том, что метрики customer-fetch-manager - это проблема, так как ее нет даже в jconsole.Я изменил его на следующую и все ту же проблему:

consumerBean = jmxCon.getMBeanServerConnection().getAttribute(new 
   ObjectName("kafka.server:type=FetcherLagMetrics"),"ConsumerLag");
            cd = (CompositeData) consumerBean;

Код, пытающийся получить доступ к этим значениям, выглядит следующим образом:

        jmxCon.getMBeanServerConnection().invoke(new 
         ObjectName("java.lang:type=Memory"), "gc", null, null);

        for (int i = 0; i < 100; i++) {

            //get an instance of the HeapMemoryUsage Mbean
            memoryMbean = jmxCon.getMBeanServerConnection().getAttribute(new ObjectName("java.lang:type=Memory"), "HeapMemoryUsage");
            cd = (CompositeData) memoryMbean;

            //get an instance of the OperatingSystem Mbean
            osMbean = jmxCon.getMBeanServerConnection().getAttribute(new ObjectName("java.lang:type=OperatingSystem"),"ProcessCpuTime");

            //get an instance of the kafka metrics Mbean
            consumerBean = jmxCon.getMBeanServerConnection().getAttribute(new ObjectName("kafka.consumer:type=consumer-fetch-manager-metrics"),"MaxLag");
            cd = (CompositeData) consumerBean;

            consumerBeanII = jmxCon.getMBeanServerConnection().getAttribute(new ObjectName("kafka.server:type=FetcherLagMetrics,name=ConsumerLag"),"Lag");


            System.out.println("Used memory: " + " " + cd.get("MaxLag") + " Used cpu: " + consumerBean); //print memory usage

            tempMemory = tempMemory + Long.parseLong(cd.get("used").toString());
            Thread.sleep(1000); //delay for one second

        }

Сбой в строке consumerBean = ...... Может кто-нибудь объяснить или предоставить правильный способ доступа к метрикам kafka с использованием реализации jmx / JMI?

1 Ответ

0 голосов
/ 11 сентября 2018

Я не уверен, что ваша версия Kafka, но когда я смотрю на мою (v1.1.0) с использованием JConsole, нет такого компонента для задержки потребителей, который вы описываете.Поэтому я думаю, что ожидается, что ваш запрос JMX завершится неудачей.

Вместо этого я считаю, что этот вид информации был перемещен в интерфейс Kafka Admin API .Поэтому вы должны использовать это сейчас, чтобы получить настройки задержки, если вы не хотите использовать kafka-consumer-groups.sh утилиту командной строки.

Для нас нам нужна только эта статистика для мониторинга, поэтому мы используем https://github.com/danielqsj/kafka_exporter, чтобы получить информацию для Прометея.

...