Истории успеха наших клиентов — лучшие проекты
Вход/ Регистрация

Мониторинг Apache Kafka

1200
20 минут чтения
Средний рейтинг статьи: 5

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

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

Архитектура Apache Kafka

Прежде чем приступать к процессу организации мониторинга и защиты Kafka, разберем архитектуру программы. 

Kafka — это распределенная система, которая состоит из нескольких ключевых компонентов:

  • Брокеры — физические или виртуальные серверы (хосты), которые принимают, хранят и обрабатывают сообщения. Каждый брокер отвечает за определенные партиции топиков.
  • Топики — логические категории, в которые поступают сообщения. Топики делятся на партиции для параллельной обработки.
  • Производители (Producers) — источники данных или же, более простым языком, клиенты, отправляющие данные в топики.
  • Потребители (Consumers) — клиенты, которые читают данные из топиков, часто объединенные в группы для распределения нагрузки.
  • ZooKeeper — используется для координации брокеров, а также хранит метаданные и конфигурацию. Начиная с версии 3.3+ появляется возможность работы без ZooKeeper благодаря KRaft (протокол для хранения метаданных и управления ими внутри Kafka). Главная особенность KRaft заключается в устранении зависимости Apache Kafka от внешнего сервиса ZooKeeper.

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

Мониторинг

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

  • Контроль производительности. Производительность брокера снижается при появлении случаев задержки в доставке сообщений или перегрузки самого брокера сообщений. Эти действия замедляют всю цепочку обработки данных.
  • Контроль целостности данных. При контроле целостности данных удается минимизировать проблемы, связанные с потерей сообщений, дублированием или повреждением данных.
  • Планирование масштабирования. Мониторинг помогает понять, когда нужно добавить брокеры (горизонтальное масштабирование) или увеличить ресурсы сервера (вертикальное масштабирование).

Ключевые метрики для мониторинга

Эффективный мониторинг требует отслеживания метрик на всех уровнях системы. Рассмотрим основные категории и примеры.

1. Метрики брокеров

  • Входящий и исходящий трафик. Показывает, сколько данных брокер принимает и отправляет. Если значения приближаются к лимитам сети или дисков, это сигнал к масштабированию.
  • Задержка при выполнении запросов. Среднее время обработки запросов от клиентов. Рост задержки может указывать на нехватку ресурсов.
  • Количество активных соединений. Аномально высокое число соединений может быть признаком атаки или некорректной работы клиентов.
  • Использование ресурсов. Процент загрузки CPU, оперативной памяти и дискового пространства.

2. Метрики топиков и партиций

  • Размер логов. Общий объём данных в топике. Если он растет бесконтрольно, стоит пересмотреть политику очистки.
  • Количество сообщений. Скорость поступления данных. Резкие скачки могут указывать на пиковые нагрузки.
  • Смещение. Позиция последнего записанного сообщения и позиция, до которой дочитали потребители.

3. Метрики потребителей и производителей

  • Consumer Lag. Отставание потребителей от производителей. Например, если lag превышает 10 000 сообщений, это может означать, что потребители не успевают обрабатывать данные.
  • Producer Request Rate. Частота запросов от производителей. Падение этого показателя может сигнализировать о сбоях на стороне отправителей.
  • Fetch Latency. Время, необходимое потребителю для получения данных. Высокие значения указывают на проблемы с сетью или брокерами.

VDS и VPS

Гибкие виртуальные серверы с почасовым
биллингом по всему миру: Россия, Азия и Европа.

Практическая настройка мониторинга для Kafka

Разберем настройку мониторинга для Kafka на практике.

Предварительные требования

Нам понадобится один сервер или одна виртуальная машина с любым предустановленным дистрибутивом Linux. В данной статье в качестве примера мы будем использовать дистрибутив Ubuntu версии 24.04.

Сервер должен соответствовать следующим требованиям:

  • Минимум 4 ГБ оперативной памяти. Данный объем подойдет только для настройки и тестового использования Apache Kafka и не предназначен для решения высокоресурсных задач. Для более серьезных задач необходимо минимум 8 ГБ оперативной памяти.

  • Минимум одноядерный процессор для базовой конфигурации. Для выполнения реальных задач (например, для работы с большим объемом данных, для работы с математическими и научными вычислениями) рекомендуется 4-ядерный процессор.

  • Наличие публичного IP-адреса, который можно арендовать на этапе создания сервера в разделе «Сеть».

Сервер можно создать в панели управления в разделе «Облачные серверы». В процессе рекомендуем выбрать регион с минимальным пингом для быстрой передачи данных. Остальные параметры можно оставить без изменений.

Сервер будет запущен через пару минут, и вы сможете найти IP-адрес, логин и пароль для подключения на Дашборде сервера.

Установка и запуск Apache Kafka

Для начала установим Kafka, используя следующие шаги:

1) Обновляем индекс репозиториев и устанавливаем пакет OpenJDK 11, который необходим для запуска Kafka:

    

2) Проверяем что Java была успешно установлена путем вывода ее версии:

    

Image35

Если в ответ команда вернула версию, то Java успешно установлена в системе.

3) Далее с помощью утилиты wget скачиваем архив с программой (используемая версия — 3.9.0):

    

4) Разархивируем скачанный архив при помощи команды:

    

На выходе появится директория с именем kafka_2.13-3.9.0. Переместим ее в директорию /opt/kafka:

    

5) Далее для удобного управления Kafka создадим systemd-юниты. Начнем с Zookeeper. При помощи любого текстового редактора создаем файл zookeeper.service:

    

Используем следующее содержимое:

    

Image36

Сохраняем изменения и выходим из файла.

Также создаем systemd-файл для kafka:

    

Содержимое будет следующим:

    

6) Перечитываем конфигурационные файлы демонов при помощи команды:

    

7) Запускаем сначала Zookeeper:

    

И проверяем его статус:

    

Image26

В статусе должно отображаться active (running), что свидетельствует об успешном запуске Zookeeper.

Далее запускаем Kafka:

    

И также проверяем статус:

    

Image17

В статусе должно отображаться active (running), что свидетельствует об успешном запуске Kafka.

8) Дополнительно создадим отдельного пользователя, которого далее назначим владельцем всех файлов и директорий, используемых Kafka:

    

9) Задаем необходимые права:

    

Тестирование установки

После того как оба сервиса — ZooKeeper и Kafka — были запущены, проверим работоспособность Kafka.

Все команды ниже необходимо выполнять из директории /opt/kafka. Перейти в нее можно так:

    

1) Создадим новый топик с именем new-topic1:

    

Image38

При успешном создании топика в терминале будет выведено сообщение «Created topic new-topic1».

2) Также выполним команду для вывода всех топиков в текущем инстансе Kafka:

    

Image11

Ранее созданный топик с именем new-topic1 был успешно создан.

3) Далее проверим работоспособность производителя (Producer). Запускаем производителя при помощи команды:

    

4) Отправим тестовое сообщение:

    

Image21

5) Не закрывая текущую сессию SSH, открываем новую сессию и переходим в директорию /opt/kafka:

    

Запускаем потребителя (Consumer) при помощи команды:

    

Image9

Если все работает правильно, то мы увидим ранее отправленное сообщение. 

Установка Prometheus

1) Создаем пользователя с именем prometheus:

    

2) Создаем директории, где будут храниться конфигурационные файлы Prometheus:

    

3) Назначаем владельцем директории /var/lib/prometheus пользователя prometheus:

    

4) Переходим в директорию /tmp:

    

И скачиваем архив с программой при помощи утилиты wget:

    

5) Разархивируем скачанный архив:

    

6) Переходим в появившуюся директорию:

    

7) Далее перемещаем директорию console конфигурационный файл prometheus.yml, бинарный файл Prometheus и конфигурационные файлы и назначаем для него владельца:

    

8) Дополнительно создаем systemd-юнит для Prometheus:

    

Используем следующее содержимое:

    

Image13

9) По умолчанию доступ до Prometheus разрешен только с localhost. Разрешим доступ со всех адресов. Для этого открываем на редактирование основной конфигурационный файл prometheus.yml при помощи любого текстового редактора:

    

В конце файла находим параметр targets в опции static_configs:

Image12

И меняем значение localhost на внешний IP-адрес сервера (внешний IP-адрес у вас будет свой):

Image30

Сохраняем изменения и выходим из файла.

10) Запускаем Prometheus, добавляем его в автозагрузку и проверяем статус:

    

Image22

В статусе должно отображаться active (running), что свидетельствует об успешном запуске Prometheus.

Перезапускаем демон systemd и prometheus и проверяем его статус:

    

Image8

Если в статусе отображается active (running), то Prometheus успешно запущен.

Переходим в браузере по IP-адресу сервера и порту 9090 (порт по умолчанию для Prometheus):

Image15

Должен открыться веб-интерфейс программы.

Установка Grafana

В связи с тем, что установить Grafana напрямую через официальный репозиторий из России нельзя, мы вручную добавим GPG ключ и воспользуемся репозиторием-зеркалом от Яндекса.

1) Создаем файл, в котором будет храниться GPG-ключ от репозитория Grafana:

    

И вставляем следующий ключ:

    

2) Создаем директорию, в которой будет храниться ключ от репозитория:

    

3) Далее необходимо сконвертировать текстовый файл с ключом в поддерживаемый формат:

    

4) Добавляем зеркало от Яндекса:

    

5) Обновляем индекс пакетов и устанавливаем Grafana:

    

6) Запускаем сервис при помощи следующих команд:

    

И проверяем статус Grafana:

    

Image1

Если в статусе отображается active (running), то Grafana успешно запущена. 

Используя IP-адрес сервера и порт 3000 (порт по умолчанию для Grafana), переходим в веб-интерфейс программы. Первоначальные логин и пароль для входа в веб-интерфейс — admin / admin. При первом входе система предложит задать новый пароль для пользователя admin:

Image7

После аутентификации откроется веб-интерфейс:

Image20

Установка JMX Exporter

JMX Exporter — это утилита, которая собирает и передает метрики из приложений, работающих на Java, в системы мониторинга, например в Prometheus. Для установки JMX Exporter необходимо выполнить следующие шаги:

1) Скачиваем утилиту из официального репозитория при помощи wget:

    

2) Перемещаем скаченный JAR-файл в директорию /opt/kafka/libs:

    

3) Открываем на редактирование файл kafka-server-start.sh:

    

И добавляем следующие строки в самый конец файла:

    

1b3a96cc 6ff9 4708 8faf 196033ba5de1

Сохраняем изменения и выходим из файла.

4) Перезапускаем Kafka при помощи команд:

    

Настройка JMX Exporter

Произведем настройку JMX Exporter.

1) Переходим в директорию /opt/kafka/config:

    

2) Создаем файл sample_jmx_exporter.yml:

    

И используем следующее содержимое:

    

Сохраняем изменения и выходим из файла.

3) Далее открываем на редактирование основной конфигурационный файл Prometheus — prometheus.yml:

    

Нам необходимо добавить endpoint Kafka, чтобы Prometheus смог собирать данные. Для этого в самом внизу добавляем следующий блок, где 103.88.242.227 — это внешний IP-адрес сервера (не забудьте поменять на свой внешний IP-адрес):

    

Image14

Сохраняем изменения и выходим из файла.

4) Перезапускаем Prometheus и проверяем его статус:

    

Image29

Настройка Kafka

Далее необходимо внести изменения при запуске Kafka, добавив путь до файлов Prometheus и JMX Exporter.

1) Открываем на редактирование systemd-файл Kafka:

    

И добавляем следующие строки в блок [Service]:

    

F6a7512d 59fe 4011 B6e1 2de49fb83a2c

Сохраняем изменения и выходим из файла.

2) Перезапускаем Kafka и проверяем статус:

    

Image33

3) Переходим в веб-интерфейс Prometheus, далее в раздел «Status» и в выпадающем меню выбираем пункт «Targets»:

Image23

У нас появится новый источник данных Kafka:

Image28

Подключение метрик Prometheus к Grafana

Финальный этап заключается в добавление метрик из Prometheus в Grafana для построения визуализации с помощью графиков.

1) Переходим в веб-интерфейс Grafana. На панели слева выбираем меню «Connections», далее в выпадающем списке переходим в раздел «Data sources»:

Image24

2) В открывшемся разделе нажимаем на кнопку «Add data source»:

Image3

3) Далее выбираем Prometheus в качестве источника данных:

Image18

4) В качестве имени источника зададим Kafka (можно любое другое незанятое имя), а в качестве адреса укажем IP-адрес и порт, где расположен Prometheus:

Image27

5) Нажимаем на кнопку «Save & test»:

Image4

При успешном подключении к Prometheus будет выведено соответствующее сообщение:

Image6

Создание визуализации в Prometheus

После того как мы настроили мониторинг, самое время добавить dashboard для визуализации в Grafana.

1) На панели слева переходим в раздел «Dashboards»:

Image19

2) В открывшемся окне, нажимаем на кнопку «New» справа и в выпадающем меню выбираем «New dashboard»:

Image2

3) Далее переходим в раздел «Import dashboard»:

Image25

4) Используем номер 11962 графика, чтобы добавить его в Grafana, и нажимаем на кнопку «Load»:

Image31

В появившемся разделе можно задать имя для графика. Внизу в качестве источника данных выбираем ранее добавленный инстанс Prometheus:

Image16

Нажимаем на кнопку «Import».

Создание тестовой нагрузки

Добавленный график сейчас не отображает нагрузку. Сымитируем ее самостоятельно. 

1) На сервере переходим в директорию /opt/kafka:

    

2) Создаем новый топик с именем test-load:

    

3) В Kafka имеется встроенный инструмент kafka-producer-perf-test.sh, который позволяет имитировать отправку сообщений производителем (producer). Запустим его для создания тестовой загрузки:

    

Команда выше сгенерирует и отправит 1000000 сообщений.

4) Также создадим нагрузку путем обработки еще 1000000 сообщений потребителем (consumer):

    

5) Переходим в dashboard Grafana и мы можем наблюдать за графиками:

Image5

Разверните Kafka на собственном сервере

Cloud MSK 15

477 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

657 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

Мониторинг Apache Kafka — это сложный и комплексный процесс, который требует максимального внимания к деталям. Процесс начинается со сбора метрик, который можно организовать при помощи современных инструменты вроде Prometheus и Grafana. После того как метрики будут настроены, необходимо регулярно проверять состояние кластера на наличие возможных проблем. Грамотный мониторинг обеспечит стабильность работы. Apache Kafka — это мощный инструмент, который раскроет свой потенциал только при правильной настройке и эксплуатации.

1200
20 минут чтения
Средний рейтинг статьи: 5
Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server