Как Kafka распределяет партиции, если количество консюмеров в группе превышает их число?

Ответ

В Kafka каждая партиция топика может быть назначена только одному консюмеру в рамках одной потребительской группы (consumer group). Это ключевой принцип, гарантирующий порядок обработки сообщений внутри партиции.

Если количество консюмеров в группе превышает количество партиций, часть консюмеров будет простаивать (idle).

Пример: 3 партиции и 4 консюмера

  • Консюмер 1 -> Партиция 0
  • Консюмер 2 -> Партиция 1
  • Консюмер 3 -> Партиция 2
  • Консюмер 4 -> Простаивает (idle)

Четвертый консюмер не будет получать сообщения, но останется в группе в качестве "горячего резерва". Если один из активных консюмеров выйдет из строя, Kafka инициирует перебалансировку (rebalance), и его партиция будет передана простаивающему консюмеру.

Ключевые выводы:

  • Максимальный уровень параллелизма для обработки топика ограничен количеством его партиций.
  • Создавать больше консюмеров, чем партиций, имеет смысл только для обеспечения отказоустойчивости.