Обзор инструментов мониторинга Kafka

Kafka

Для кластеров больших данных очень нужна функция мониторинга, судить о сбоях по логам неэффективно, нужны полные индикаторы, помогающие нам управлять кластерами Kafka. В этой статье обсуждается мониторинг Kafka и некоторые часто используемые сторонние инструменты мониторинга.

1. Кафка Мониторинг

В первую очередь вводится принцип мониторинга kafka.Также для мониторинга используются сторонние инструменты.Также мы можем реализовать мониторинг самостоятельно.Адрес документа мониторинга на официальном сайте:

kafka.apache.org/document ATI…](kafka.apache.org/document ATI…)

kafka использует Yammer Metrics для мониторинга, который представляет собой библиотеку мониторинга Java.

Kafka по умолчанию имеет много индикаторов мониторинга.По умолчанию он использует интерфейс JMX для удаленного доступа.Конкретный метод заключается в установке JMX_PORT перед запуском брокера и клиентов:

JMX_PORT=9997 bin/kafka-server-start.sh config/server.properties

Каждая метрика мониторинга Kafka определяется в форме JMX MBEAN, которая представляет собой экземпляр управляемого ресурса.

Мы можем использовать Jconsole (консоль мониторинга и управления Java), инструмент визуального мониторинга и управления на основе JMX.

Чтобы визуализировать результаты мониторинга:

file

Рис. 2 Jconsole

Тогда различные индикаторы kafka можно найти под Mbean.

Соглашение об именах MBean: kafka.xxx:type=xxx,xxx=xxx

В основном делятся на следующие категории:

(Есть много индикаторов мониторинга, здесь перехватываются только некоторые из них, подробности смотрите в официальной документации)

Графический и предупреждающий мониторинг:

kafka.server относится к серверу, а kafka.network — к сети.

Description Mbean name Normal value
Message in rate kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec
Byte in rate from clients kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec
Byte in rate from other brokers kafka.server:type=BrokerTopicMetrics,name=ReplicationBytesInPerSec
Request rate kafka.network:type=RequestMetrics,name=RequestsPerSec,request={Produce|FetchConsumer|FetchFollower}
Error rate kafka.network:type=RequestMetrics,name=ErrorsPerSec,request=([-.\w]+),error=([-.\w]+) Number of errors in responses counted per-request-type, per-error-code. If a response contains multiple errors, all are counted. error=NONE indicates successful responses.

Общие метрики мониторинга для мониторинга производителей/потребителей/подключений/потоков:

Мониторинг во время работы kafka.

Metric/Attribute name Description Mbean name
connection-close-rate Connections closed per second in the window. kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\w]+)
connection-close-total Total connections closed in the window. kafka.[producer|consumer|connect]:type=[producer|consumer|connect]-metrics,client-id=([-.\w]+)

Общие метрики для каждого брокера для мониторинга производителя/потребителя/подключения/потоков:

Мониторинг каждого брокера.

Metric/Attribute name Description Mbean name
outgoing-byte-rate The average number of outgoing bytes sent per second for a node. kafka.[producer|consumer|connect]:type=[consumer|producer|connect]-node-metrics,client-id=([-.\w]+),node-id=([0-9]+)
outgoing-byte-total The total number of outgoing bytes sent for a node. kafka.[producer|consumer|connect]:type=[consumer|producer|connect]-node-metrics,client-id=([-.\w]+),node-id=([0-9]+)

Мониторинг производителя:

Мониторинг во время вызова производителя.

Metric/Attribute name Description Mbean name
waiting-threads The number of user threads blocked waiting for buffer memory to enqueue their records. kafka.producer:type=producer-metrics,client-id=([-.\w]+)
buffer-total-bytes The maximum amount of buffer memory the client can use (whether or not it is currently used). kafka.producer:type=producer-metrics,client-id=([-.\w]+)
buffer-available-bytes The total amount of buffer memory that is not being used (either unallocated or in the free list). kafka.producer:type=producer-metrics,client-id=([-.\w]+)
bufferpool-wait-time The fraction of time an appender waits for space allocation. kafka.producer:type=producer-metrics,client-id=([-.\w]+)

Мониторинг потребителей:

Мониторинг во время вызова потребителя.

Metric/Attribute name Description Mbean name
commit-latency-avg The average time taken for a commit request kafka.consumer:type=consumer-coordinator-metrics,client-id=([-.\w]+)
commit-latency-max The max time taken for a commit request kafka.consumer:type=consumer-coordinator-metrics,client-id=([-.\w]+)
commit-rate The number of commit calls per second kafka.consumer:type=consumer-coordinator-metrics,client-id=([-.\w]+)
commit-total The total number of commit calls kafka.consumer:type=consumer-coordinator-metrics,client-id=([-.\w]+)

Подключить мониторинг:

Attribute name Description
connector-count The number of connectors run in this worker.
connector-startup-attempts-total The total number of connector startups that this worker has attempted.

Мониторинг потоков:

Metric/Attribute name Description Mbean name
commit-latency-avg The average execution time in ms for committing, across all running tasks of this thread. kafka.streams:type=stream-metrics,client-id=([-.\w]+)
commit-latency-max The maximum execution time in ms for committing across all running tasks of this thread. kafka.streams:type=stream-metrics,client-id=([-.\w]+)
poll-latency-avg The average execution time in ms for polling, across all running tasks of this thread. kafka.streams:type=stream-metrics,client-id=([-.\w]+)

Эти индикаторы охватывают различные ситуации в нашем использовании kafka, а kafka.log записывает информацию журнала. Для каждого MBean существуют определенные параметры.

Через эти параметры, такие как исходящая и входящая скорость, скорость изменения ISR, размер пакета на стороне Producer, количество потоков, размер задержки на стороне Consumer, скорость потока и т. д. Конечно, нам также нужно обратить внимание на JVM. , а также мониторинг на уровне ОС, все из которых являются общими инструментами, здесь не повторяются.

Принцип мониторинга kafka в основном понятен, и большинство других сторонних инструментов мониторинга усовершенствованы на этом уровне.Вот несколько основных инструментов мониторинга.

2. JMXTool

JmxTool — это не фреймворк, а инструмент, предоставляемый Kafka по умолчанию для просмотра метрик мониторинга JMX в режиме реального времени. .

Откройте терминал и войдите в каталог установки Kafka.Введите команду bin/kafka-run-class.sh kafka.tools.JmxTool, чтобы получить справочную информацию об инструменте JmxTool.

Например, если мы хотим отслеживать входящую скорость, мы можем ввести команду:

bin/kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec --jmx-url service:jmx:rmi:///jndi/rmi://:9997/jmxrmi --date-format "YYYY-MM-dd HH:mm:ss" --attributes FifteenMinuteRate --reporting-interval 5000

Значение BytesInPerSec выводится на консоль каждые 5 секунд:

>kafka_2.12-2.0.0 rrd$ bin/kafka-run-class.sh kafka.tools.JmxTool --object-name kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec --jmx-url service:jmx:rmi:///jndi/rmi://:9997/jmxrmi --date-format "YYYY-MM-dd HH:mm:ss" --attributes FifteenMinuteRate --reporting-interval 5000

Trying to connect to JMX url: service:jmx:rmi:///jndi/rmi://:9997/jmxrmi.

"time","kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec:FifteenMinuteRate"

2018-08-10 14:52:15,784224.2587058166

2018-08-10 14:52:20,1003401.2319497257

2018-08-10 14:52:25,1125080.6160773218

2018-08-10 14:52:30,1593394.1860063889

3. Кафка-менеджер

Платформа мониторинга kafka с открытым исходным кодом от Yahoo 2015 года, написанная на scala. Адрес гитхаба следующий:GitHub.com/Yahoo/Кафка…

Условия использования:

  1. Kafka 0.8.. or 0.9.. or 0.10.. or 0.11..
  2. Java 8+

скачатьkafka-manager

Конфигурация: conf/application.conf

kafka-manager.zkhosts="my.zookeeper.host.com:2181,other.zookeeper.host.com:2181"

Развертывание: здесь используется развертывание sbt

./sbt clean dist

запускать:

 bin/kafka-manager
 指定端口:
 $ bin/kafka-manager -Dconfig.file=/path/to/application.conf -Dhttp.port=8080
 权限:
 $ bin/kafka-manager -Djava.security.auth.login.config=/path/to/my-jaas.conf

Затем посетите локальный хост: 8080

Вы можете увидеть страницу мониторинга:

file

тема графика

file

Фигурный брокер

Страница очень простая и имеет много богатых функций, она с открытым исходным кодом и бесплатна, ее рекомендуется использовать, но текущая версия поддерживает Kafka 0.8.. or 0.9.. or 0.10..или 0,11, требуют особого внимания.

4. кафка-монитор

Среда мониторинга kafka с открытым исходным кодом Linkin, адрес github выглядит следующим образом:GitHub.com/LinkedIn/card…

Основанный на Gradle 2.0 и выше, он поддерживает Java 7 и Java 8.

Поддержка kafka от 0.8 до 2.0, пользователи могут загружать разные ветки в соответствии со своими потребностями.

использовать:

Скомпилировать:

$ git clone https://github.com/linkedin/kafka-monitor.git
$ cd kafka-monitor 
$ ./gradlew jar

Измените конфигурацию: config/kafka-monitor.properties

"zookeeper.connect" = "localhost:2181"

запускать:

$ ./bin/kafka-monitor-start.sh config/kafka-monitor.properties
单集群启动:
$ ./bin/single-cluster-monitor.sh --topic test --broker-list localhost:9092 --zookeeper localhost:2181
多集群启动:
$ ./bin/kafka-monitor-start.sh config/multi-cluster-monitor.properties

Затем посетите localhost:8080, чтобы увидеть страницу мониторинга.

file

Рисунок кафкамонитор

В то же время мы также можем запрашивать другие индикаторы через http-запросы:

curl localhost:8778/jolokia/read/kmf.services:type=produce-service,name=*/produce-availability-avg

Вообще говоря, его веб-функция относительно проста и не используется многими пользователями, а функция http очень полезна и поддерживает множество версий.

5. Офсетный монитор Кафки

Адрес официального сайта http://quantifind.github.io/KafkaOffsetMonitor/

гитхаб-адресGitHub.com/все найти/…

Использование: выполнить после загрузки

java -cp KafkaOffsetMonitor-assembly-0.3.0.jar:kafka-offset-monitor-another-db-reporter.jar \
     com.quantifind.kafka.offsetapp.OffsetGetterWeb \
     --zk zk-server1,zk-server2 \
     --port 8080 \
     --refresh 10.seconds \
     --retain 2.days
     --pluginsArgs anotherDbHost=host1,anotherDbPort=555

Затем просмотрите localhost:8080.

file

Рисунок offsetmonitor1

file

Рисунок offsetmonitor2

Этот проект больше ориентирован на мониторинг смещения, и страница очень насыщенная, но она не будет обновляться через 15 лет и не может поддерживать последнюю версию kafka. Адрес версии, которая продолжает поддерживаться, выглядит следующим образом: https://github.com/Morningstar/kafka-offset-monitor.

6. Круиз-контроль

В августе 2017 года Linkin открыл исходный код инфраструктуры круиз-контроля, которая используется для мониторинга крупномасштабных кластеров, включая ряд функций эксплуатации и обслуживания.Говорят, что в LinkedIn более 20 000 кластеров kafka, и проект все еще обновляется.

Адрес проекта на гитхабе:GitHub.com/LinkedIn/Для взрослых…

использовать:

下载
git clone https://github.com/linkedin/cruise-control.git && cd cruise-control/
编译
./gradlew jar
修改 config/cruisecontrol.properties
bootstrap.servers   zookeeper.connect
启动:
./gradlew jar copyDependantLibs
./kafka-cruise-control-start.sh [-jars PATH_TO_YOUR_JAR_1,PATH_TO_YOUR_JAR_2] config/cruisecontrol.properties [port]

Доступ после запуска:

http://localhost:9090/kafkacruisecontrol/state

Страниц нет, все подается как апи отдыха.

Список интерфейсов выглядит следующим образом:GitHub.com/LinkedIn/Для взрослых…

Эта структура очень гибкая, и пользователи могут получать различные индикаторы для оптимизации своих кластеров в соответствии со своими условиями.

7. Докторкафка

DoctorKafka — это инструмент самовосстановления кластера Kafka с открытым исходным кодом и балансировки рабочей нагрузки от Pinterest.

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

использовать:

下载:
git clone [git-repo-url] doctorkafka
cd doctorkafka
编译:
mvn package -pl kafkastats -am
启动:
java -server \
    -Dlog4j.configurationFile=file:./log4j2.xml \
    -cp lib/*:kafkastats-0.2.4.8.jar \
    com.pinterest.doctorkafka.stats.KafkaStatsMain \
        -broker 127.0.0.1 \
        -jmxport 9999 \
        -topic brokerstats \
        -zookeeper zookeeper001:2181/cluster1 \
        -uptimeinseconds 3600 \
        -pollingintervalinseconds 60 \
        -ostrichport 2051 \
        -tsdhostport localhost:18126 \
        -kafka_config /etc/kafka/server.properties \
        -producer_config /etc/kafka/producer.properties \
        -primary_network_ifacename eth0

Страница выглядит следующим образом:

file

Рисунок докеркафка

После запуска DoctorKafka периодически проверяет состояние каждого кластера. При обнаружении сбоя брокера рабочая нагрузка отказавшего брокера будет перенесена на брокера с достаточной пропускной способностью. Он выдаст предупреждение, если в кластере недостаточно ресурсов для перераспределения. Принадлежит платформе, которая автоматически поддерживает работоспособность кластера.

8. Нора

Burrow — это фреймворк для мониторинга отставания потребителей, открытый исходным кодом LinkedIn.

Адрес гитхаба следующий:GitHub.com/LinkedIn/B U…

Используя Burrow для мониторинга кафки, нет необходимости задавать порог лага заранее, он полностью основан на динамической оценке процесса потребления

Burrow поддерживает чтение смещения двумя способами: тема kafka и zookeeper, и может поддерживать как новые, так и старые версии kafka.

Burrow поддерживает http, электронную почту

Burrow по умолчанию предоставляет только HTTP-интерфейс (конечную точку HTTP), данные в формате json, веб-интерфейс отсутствует.

Установить с помощью:

$ Clone github.com/linkedin/Burrow to a directory outside of $GOPATH. Alternatively, you can export GO111MODULE=on to enable Go module.
$ cd to the source directory.
$ go mod tidy
$ go install

Пример:

列出所有监控的Kafka集群
curl -s http://localhost:8000/v3/kafka |jq
{
  "error": false,
  "message": "cluster list returned",
  "clusters": [
    "kafka",
    "kafka"
  ],
  "request": {
    "url": "/v3/kafka",
    "host": "kafka"
  }
}

Другие фреймворки, а также kafka-web-console:GitHub.com/Клод Хорс Тач/…

кафкат:GitHub.com/air не NB/Kafka…

capillary:GitHub.com/Раввин Коэн говорит/Wipe…

chaperone:GitHub.com/UBwhile/Chappell…

Есть еще много других, но мы должны выбрать в соответствии с нашей собственной версией кафки.

Больше вычислений в реальном времени, Kafka и других связанных технических сообщений в блогах, добро пожаловать, чтобы обратить внимание на потоковые вычисления в реальном времени.