В Apache Kafka, что произойдет, если в Consumer Group добавить нового потребителя (Consumer), а количество партиций (Partition) останется прежним?

«В Apache Kafka, что произойдет, если в Consumer Group добавить нового потребителя (Consumer), а количество партиций (Partition) останется прежним?» — вопрос из категории Брокеры сообщений, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Произойдет ребалансировка потребителей (rebalance). Партиции топика будут перераспределены между всеми активными потребителями в группе.

Логика перераспределения:

  • Партиций > Потребителей: Новый потребитель получит часть партиций от других.
  • Партиций = Потребителям: Партиции распределятся поровну, некоторые потребители могут остаться без работы, если партиций меньше.
  • Партиций < Потребителей: Часть потребителей не получит партиций и будет бездействовать.

Пример: Было 3 партиции (P0, P1, P2) и 2 потребителя (C1, C2).

До ребалансировки:
C1 -> [P0, P1]
C2 -> [P2]

После добавления C3 и ребалансировки (CooperativeStickyAssignor):
C1 -> [P0]
C2 -> [P1]
C3 -> [P2]

Важные последствия:

  1. Пауза в обработке: На время ребалансировки потребители приостанавливают чтение сообщений.
  2. Стратегия назначения: Для минимизации влияния используйте стратегию CooperativeStickyAssignor (начиная с Kafka 2.4+), которая избегает полной ребалансировки.
  3. Повторная обработка: Потребитель, потерявший партицию, должен завершить обработку текущих сообщений до перехода партиции к новому владельцу, что может привести к дублированию обработки.