Вопрос проверяет понимание поведения Kafka при динамическом масштабировании consumer group.
При добавлении нового consumer’а Kafka инициирует rebalance группы. Все partition’ы перераспределяются между consumer’ами. Новый consumer получает часть partition’ов. Старые consumer’ы могут потерять часть своих partition’ов. После завершения rebalance обработка сообщений продолжается.
Добавление нового consumer’а считается изменением состава consumer group и всегда приводит к rebalance.
Процесс выглядит следующим образом:
Новый consumer подключается к группе
Coordinator фиксирует изменение состава
Запускается rebalance
Partition’ы перераспределяются между всеми consumer’ами
Consumer’ы продолжают чтение с новых назначений
В результате:
нагрузка может распределиться более равномерно
увеличивается параллелизм (если есть свободные partition’ы)
часть partition’ов «переезжает» к новому consumer’у
Добавление consumer’а:
не увеличит производительность, если partition’ов меньше или равно
всегда вызывает кратковременную паузу обработки
Добавление нового consumer’а в группу приводит к rebalance, после которого partition’ы перераспределяются, а система продолжает работу с новым уровнем параллелизма.