Вопрос проверяет понимание механизмов распределения partition’ов внутри consumer group и роли coordinator’а.
Partition’ы распределяются между consumer’ами внутри consumer group с помощью алгоритма назначения. За процесс отвечает group coordinator на стороне Kafka. Каждый partition назначается только одному consumer’у. Конкретный алгоритм распределения зависит от выбранной стратегии. Цель распределения — равномерно распределить нагрузку.
Kafka распределяет partition’ы между consumer’ами автоматически, чтобы обеспечить параллельную обработку и соблюдение порядка сообщений.
Group coordinator — это broker, который:
отслеживает состав consumer group,
запускает процесс распределения partition’ов,
контролирует состояние группы.
Kafka поддерживает несколько стратегий назначения partition’ов:
Range — распределяет partition’ы по диапазонам (по порядку)
RoundRobin — распределяет partition’ы по кругу
Sticky — старается минимизировать изменения при rebalance
Стратегия выбирается на стороне consumer’а.
Если:
4 partition’а
2 consumer’а
То возможный результат:
Consumer A → Partition 0, 1
Consumer B → Partition 2, 3
При распределении всегда соблюдаются правила:
один partition → один consumer
consumer может читать несколько partition’ов
порядок сообщений внутри partition сохраняется
Partition’ы распределяются между consumer’ами автоматически через coordinator с использованием стратегий назначения, что позволяет Kafka балансировать нагрузку и сохранять порядок сообщений.