Кейс: два сервиса читали одну партицию Kafka, потому что group.id совпал
Два независимых сервиса скопировали конфиг consumer'а из одного онбординг-шаблона. group.id остался тем же — просто никто не поменял строку после копипаста.
Kafka не проверяет, из какого деплоя пришёл consumer. group.id — это идентификатор группы across всего кластера, а не namespace конкретного сервиса. Оба consumer'а присоединились к одной группе, и партиции разделились между ними по обычному протоколу ребалансировки.
Каждый сервис со своей стороны видел частичный поток сообщений и решил, что это нормально — часть сообщений просто не долетала до его бизнес-логики, потому что реально уходила другому потребителю.
Map props = Map.of( ConsumerConfig.GROUP_ID_CONFIG, "notifications" );
Нашли через kafka-consumer-groups --describe: у одной группы оказалось два разных client.id от двух разных приложений. Спросят, как Kafka распределяет партиции между consumer'ами одной группы и почему увеличение числа consumer'ов сверх числа партиций ничего не ускоряет.
group.id — это глобальный идентификатор в масштабе кластера, а не деталь конфигурации одного сервиса. Совпадение — это баг, не совпадение.
Тренажёр: 600 вопросов, мок с таймером, план повторов
senior·base — что спрашивают на самом деле
В этом посте были ссылки, но мы их удалили по правилам Сетки