Commands
Apache Kafka

kafka-consumer-groups.sh --describe: Состояние consumer group: lag, offset, участники

Состояние consumer group: lag, offset, участники

Вот шпаргалка по команде kafka-consumer-groups.sh --describe. Использую её постоянно для диагностики потребителей.

Базовый синтаксис

Команда показывает детальное состояние консюмер-группы: распределение партиций между участниками, текущие оффсеты, лаг (отставание) и хост клиента. Базовый вызов выглядит так:

/opt/kafka/bin/kafka-consumer-groups.sh \
  --bootstrap-server kafka-broker-1:9092 \
  --group my-service-group \
  --describe

Ключевые столбцы вывода:

  • TOPIC, PARTITION: топик и номер партиции.
  • CURRENT-OFFSET: последний успешно обработанный оффсет в группе.
  • LOG-END-OFFSET: последний доступный оффсет в партиции (конец лога).
  • LAG: разница между LOG-END-OFFSET и CURRENT-OFFSET — необработанные сообщения.
  • CONSUMER-ID, HOST: идентификатор и хост клиента, обрабатывающего партицию.

Полезные флаги

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

--all-groups — выводит список всех групп в кластере с их состоянием (Stable, Empty, Dead). Использую для аудита и поиска «зомби-групп».

kafka-consumer-groups.sh --bootstrap-server localhost:9092 --all-groups --describe

--state — фильтрация групп по состоянию. Например, чтобы найти только активные группы:

kafka-consumer-groups.sh --bootstrap-server localhost:9092 --all-groups --describe --state Stable

Типичные сценарии

1. Диагностика растущего лага Если алерт показал лаг, сначала смотрю, равномерно ли он распределён. Большой лаг на одной партиции часто указывает на проблему в логике обработки конкретного сообщения.

2. Проверка активности группы после инцидента После сбоя брокера или клиента проверяю, перераспределились ли партиции (CONSUMER-ID не пустые) и нет ли LAG на всех партициях. Группа в состоянии Empty при работающем сервисе — красный флаг.

3. Поиск «висящих» коннектов Если HOST показывает IP-адрес несуществующей или старой ноды, значит, клиент не корректно отключился. Это может блокировать ребалансировку.

Частые ошибки

Забыли указать --bootstrap-server. Команда попытается подключиться к localhost:9092 и упадёт с ошибкой.

Путаница в именах групп. Всегда копирую имя группы из конфигурации приложения, а не ввожу вручную. Опечатка приводит к выводу Consumer group 'my-servise-group' does not exist..