Ответ
В Kafka каждая партиция топика может быть назначена только одному консюмеру в рамках одной потребительской группы (consumer group
). Это ключевой принцип, гарантирующий порядок обработки сообщений внутри партиции.
Если количество консюмеров в группе превышает количество партиций, часть консюмеров будет простаивать (idle).
Пример: 3 партиции и 4 консюмера
- Консюмер 1 -> Партиция 0
- Консюмер 2 -> Партиция 1
- Консюмер 3 -> Партиция 2
- Консюмер 4 -> Простаивает (idle)
Четвертый консюмер не будет получать сообщения, но останется в группе в качестве "горячего резерва". Если один из активных консюмеров выйдет из строя, Kafka инициирует перебалансировку (rebalance), и его партиция будет передана простаивающему консюмеру.
Ключевые выводы:
- Максимальный уровень параллелизма для обработки топика ограничен количеством его партиций.
- Создавать больше консюмеров, чем партиций, имеет смысл только для обеспечения отказоустойчивости.