Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Группы
Группа консьюмеров отдаёт каждую партицию одному участнику, а когда участник входит в группу или выходит из неё, партиции переносятся при перебалансировке.
Схема текстом
- Участник 1: Читает P0, P1, P2; P2 отозвана; Читает P0, P1
- Координатор: Перебалансировка и новое назначение; Участник без контрольных сигналов дольше session.timeout.ms выходит из группы, и его партиции переносятся так же
- Участник 2: Вступает в группу; Читает P2 с зафиксированного смещения
- Вступает в группу → Перебалансировка и новое назначение: вход
- Перебалансировка и новое назначение → P2 отозвана: отзыв
- P2 отозвана → Читает P0, P1
- Перебалансировка и новое назначение → Читает 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 (конфигурация, группы консьюмеров).