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..