Для кластеров больших данных очень нужна функция мониторинга, судить о сбоях по логам неэффективно, нужны полные индикаторы, помогающие нам управлять кластерами 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.
Чтобы визуализировать результаты мониторинга:
Рис. 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/Кафка…
Условия использования:
скачать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
Вы можете увидеть страницу мониторинга:
тема графика
Фигурный брокер
Страница очень простая и имеет много богатых функций, она с открытым исходным кодом и бесплатна, ее рекомендуется использовать, но текущая версия поддерживает 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, чтобы увидеть страницу мониторинга.
Рисунок кафкамонитор
В то же время мы также можем запрашивать другие индикаторы через 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.
Рисунок offsetmonitor1
Рисунок 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
Страница выглядит следующим образом:
Рисунок докеркафка
После запуска 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 и других связанных технических сообщений в блогах, добро пожаловать, чтобы обратить внимание на потоковые вычисления в реальном времени.