Как отслеживать отставание потребителя в кафке через jmx?

У меня есть установка kafka, которая включает экспортер jmx в prometheus. Я ищу метрику, которая дает отставание смещения на основе темы и идентификатора группы. У меня кафка 2.2.0.

Некоторые онлайн-ресурсы указывают на метрику под названием kafka.consumer, но в моей настройке такой метрики нет.

Из моего jmxterminal:

$>domains
#following domains are available
JMImplementation
com.sun.management
java.lang
java.nio
java.util.logging
jdk.management.jfr
kafka
kafka.cluster
kafka.controller
kafka.coordinator.group
kafka.coordinator.transaction
kafka.log
kafka.network
kafka.server
kafka.utils

Однако я могу увидеть нужные мне данные с помощью следующей команды:

root@kafka-0:/kafka# bin/kafka-consumer-groups.sh --describe --group benchmark_consumer_group --bootstrap-server localhost:9092
Consumer group 'benchmark_consumer_group' has no active members.

TOPIC               PARTITION  CURRENT-OFFSET  LOG-END-OFFSET  LAG             CONSUMER-ID     HOST            CLIENT-ID
benchmark_topic_10B 2          2795128         54223220        51428092        -               -               -
benchmark_topic_10B 9          4               4               0               -               -               -
benchmark_topic_10B 6          7               7               0               -               -               -
benchmark_topic_10B 7          5               5               0               -               -               -
benchmark_topic_10B 0          2834028         54224939        51390911        -               -               -
benchmark_topic_10B 1          15342331        54222342        38880011        -               -               -
benchmark_topic_10B 4          5               5               0               -               -               -
benchmark_topic_10B 5          6               6               0               -               -               -
benchmark_topic_10B 8          8               8               0               -               -               -
benchmark_topic_10B 3          4               4               0               -               -               -


Но это не помогает, так как мне нужно отслеживать, если из метрики. Кроме того, выполнение этой команды занимает около 25 секунд, что делает нецелесообразным ее использование в качестве источника метрик.

Я предполагаю, что метрика kafka.consumer не существует в версии 2.2.0 и была заменена на другую. Хотя я не могу найти какие-либо ресурсы в Интернете с актуальной информацией о том, как и где получить эту метрику.

Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Apache Kafka - популярная платформа распределенной потоковой передачи данных, которую можно использовать для построения конвейеров данных в реальном...
6
0
8 177
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Метрики kafka.consumer JMX присутствуют только в самих процессах-потребителях, а не в процессах брокера Kafka. Обратите внимание, что вы не получите метрику kafka.consumer от потребителей, использующих потребительскую библиотеку, отличную от библиотеки Java.

В настоящее время нет доступных метрик JMX для потребительского отставания от самого брокера Kafka. Существуют и другие решения, которые обычно используются для мониторинга отставания потребителей, например Нора от LinkedIn. Есть также несколько проектов с открытым исходным кодом, таких как kafka9.offsets, которые предоставляют метрики потребительской задержки через JMX, но могут не обновляться для работы с последней версией Kafka.

То, что вы говорите, очень маловероятно, учитывая, что я запросил брокера с помощью скрипта kafka-consumer-groups.sh, когда не было подключенных потребителей, и получил данные. Смотрите мой вопрос, выход есть

Tom Klino 07.04.2019 18:32

Правильно, вы увидите отставание группы потребителей в выводе kafka-consumer-groups.sh. Это внутренне вычисляет отставание через тему __consumer_offsets. Хотя вы можете видеть такие метрики, как задержка, из инструментов командной строки, это не означает, что метрики предоставляются брокером через JMX.

devshawn 07.04.2019 18:36

Ок понял. Есть ли способ выполнить те же вычисления kafka-consumer-groups.sh быстрее? Скрипт выполняется 25 секунд. Если я смогу получить тот же результат менее чем за секунду, я смогу отправить эти данные в прометей самостоятельно (нет необходимости в jmx)

Tom Klino 07.04.2019 20:04

@Tom Как уже упоминалось, Burrow будет использовать тему смещения, и вы можете объединить это с Telegraf, у которого есть парсер для Burrow (при условии, что Burrow не выполняет метрики Prometheus) для отправки этих значений в хранилище метрик.

OneCricketeer 07.04.2019 22:03

@Tom есть еще этот проект github.com/zalando-incubator/remora/issues/58

OneCricketeer 07.04.2019 22:04

Я уже видел Нору, и она выглядит неплохо. Однако на данный момент принято стратегическое решение не усложнять систему и использовать только то, что доступно из коробки. Поэтому я просто ищу способ запросить у kafka задержку смещения для каждой группы потребителей по теме.

Tom Klino 07.04.2019 22:11

@TomKlino Я бы посоветовал проверить этот проект; похоже, он делает то, что вы ищете, и, поскольку он имеет открытый исходный код, вы можете изменить его по своему вкусу. github.com/braedon/prometheus-kafka-consumer-group-exporter

devshawn 08.04.2019 01:20

Вы можете попробовать Kafka Minion ( https://github.com/cloudworkz/kafka-миньон ). Хотя Kafka Minion внутренне работает аналогично Burrow (использует тему __consumer_offsets для смещений группы потребителей), у него есть несколько преимуществ для вашего варианта использования.

Преимущества Kafka Minion перед Burrow для вашего случая:

  • Имеет встроенную поддержку prometheus (не требуется дополнительное развертывание, чтобы просто предоставить метрики prometheus)
  • Имеет образец панели инструментов Grafana
  • Имеет дополнительные метрики (такие как метка времени последней фиксации для комбинации Consumergroup:topic:partition, количество коммитов, информация о политике очистки, вы можете перечислить все группы потребителей для данной темы и т. д.)
  • Не включена зависимость zookeeper (что также означает, что потребители, которые все еще фиксируют смещения для zookeeper, не поддерживаются)
  • Поддержка высокой доступности (!!). У Burrow есть проблема, заключающаяся в том, что он всегда будет предоставлять метрики, которые будут неправильными, когда он только начал использовать тему __consumer_offsets. Поэтому вы не можете запустить его в режиме HA. Это проблема, когда вы хотите настроить оповещения на основе задержек группы потребителей.
  • Kafka Minion не поддерживает несколько кластеров, что снижает сложность кода и конечного пользователя. Очевидно, вы все еще можете развернуть Kafka Minion на каждый кластер.

Отказ от ответственности: Я автор Kafka Minion и все еще жду отзывов от других пользователей. Я намерен активно поддерживать и развивать экспортер для своих проектов, компании, в которой я работаю, и для сообщества.

Чтобы ответить на ваш вопрос о том, что вы видите, используйте сценарий оболочки kafka-consumer-groups.sh. Это не сработает, поскольку не может сообщать о задержках для неактивных потребителей, что несколько контрпродуктивно.

было бы неплохо иметь поддержку кластеров kafka с Kerberized

Ashika Umanga Umagiliya 04.02.2020 03:23

@AshikaUmangaUmagiliya Мы работаем над этим, скоро будет пиар. Обзор и тестирование приветствуются. Есть открытая проблема на гитхабе, давайте обсудим там

kentor 05.02.2020 19:35

@kentor Я пытаюсь интегрировать Minions с AWS MSK, вот ссылка, не могли бы вы помочь stackoverflow.com/questions/61641056/kakfa-minions-with-aws-‌​msk

Kalava 06.05.2020 19:13

Другие вопросы по теме