Eager, cooperative и KIP-848: чем отличаются протоколы и почему группа встаёт при каждом деплое.
Ребалансировка — перераспределение партиций между участниками группы. Она запускается, когда участник входит или выходит, когда меняется число партиций или когда участник перестал слать heartbeat дольше session.timeout.
Классический (eager) протокол работает как stop-the-world: все участники отдают все свои партиции, координатор считает новое назначение, и только потом группа продолжает работу. При десятках инстансов и тяжёлой инициализации пауза измеряется секундами — и случается при каждом деплое.
Cooperative sticky (KIP-429) отзывает только те партиции, которые реально переезжают. Остальные продолжают обрабатываться, и пауза становится точечной.
KIP-848 переносит расчёт назначения на брокер: координатор сам считает, кому что отдать, и рассылает изменения инкрементально. Клиент перестаёт быть узким местом, а «залипшие» ребалансировки из-за медленного участника уходят. В Kafka 4.3 классический протокол уже пишет предупреждение об устаревании (KIP-1274).
Для требований к интеграции это одна строчка: допустимая пауза обработки при выкатке. Она напрямую зависит от выбранного протокола и от того, сколько времени занимает инициализация консьюмера.
Важное следствие ребалансировки: новый владелец партиции начинает читать с последнего закоммиченного оффсета, а не с того места, где реально остановился прежний. Всё, что было обработано, но не закоммичено, обработается повторно. Именно поэтому обработчик обязан быть идемпотентным.
Разобрать это в симуляторе Интерактивный сценарий: настраиваешь кластер, ломаешь его и смотришь, что происходитУвеличить session.timeout.ms и max.poll.interval.ms под реальное время обработки, использовать cooperative или KIP-848, включить static membership для управляемых рестартов.
Новый владелец читает с закоммиченного оффсета. Всё обработанное, но не закоммиченное, обрабатывается заново.
KIP-848, если версия кластера и клиента позволяют; иначе cooperative sticky. Классический eager — только для совместимости.