Перейти к основному содержимому
Нормативная версия документации - английская

Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.

Группы

Группа консьюмеров отдаёт каждую партицию одному участнику, а когда участник входит в группу или выходит из неё, партиции переносятся при перебалансировке.

Перебалансировка: участник вступает в группу, координатор переносит к нему партицию, и он продолжает с зафиксированного смещенияУчастник 1КоординаторУчастник 2ЧитаетP0, P1, P2Вступаетв группуПеребалансировкаи новоеназначениеP2отозванаЧитаетP0, P1Читает P2 сзафиксированногосмещенияУчастник без контрольных сигналов дольше session.timeout.msвыходит из группы, и его партиции переносятся так же
Схема текстом
  1. Участник 1: Читает P0, P1, P2; P2 отозвана; Читает P0, P1
  2. Координатор: Перебалансировка и новое назначение; Участник без контрольных сигналов дольше session.timeout.ms выходит из группы, и его партиции переносятся так же
  3. Участник 2: Вступает в группу; Читает P2 с зафиксированного смещения
  4. Вступает в группу → Перебалансировка и новое назначение: вход
  5. Перебалансировка и новое назначение → P2 отозвана: отзыв
  6. P2 отозвана → Читает P0, P1
  7. Перебалансировка и новое назначение → Читает P2 с зафиксированного смещения: назначение

Координатор группы - один из брокеров кластера. Когда участник входит или выходит, координатор начинает перебалансировку, и группа договаривается о новом назначении. Партиция, которую забрали у одного участника, у него отзывается и назначается другому, а тот продолжает с зафиксированного смещения группы. Работу, которую первый участник сделал после своей последней фиксации, второй прочитает заново. Партиция, для которой группа ещё ничего не фиксировала, начинается там, где велит auto.offset.reset: по умолчанию с конца журнала.

Участник, который не присылает контрольные сигналы дольше session.timeout.ms (45 секунд в librdkafka), исключается из группы. Участник, который не берёт новую запись дольше max.poll.interval.ms (5 минут), тоже выходит из группы.

partition.assignment.strategy решает, как перебалансировка переносит партиции. Жадные стратегии, range и roundrobin (по умолчанию librdkafka берёт обе, range первой), отзывают все партиции и назначают их заново. cooperative-sticky переносит только партиции, которые меняют владельца, а остальные продолжают читаться во время перебалансировки (KIP-429). Внутри одной группы два семейства смешивать нельзя.

Консьюмер может взять партиции и по имени, не вступая в протокол группы. Тогда перебалансировки у него не бывает, и его партиции никуда не переносятся.

Значения по умолчанию взяты из librdkafka (конфигурация, группы консьюмеров).