Вопрос проверяет понимание реальных ограничений масштабирования Kafka и умение объяснить, почему добавление консьюмеров не всегда ускоряет обработку.
Главное ограничение consumer group — количество партиций. Один консьюмер может читать несколько партиций, но одна партиция не может читаться несколькими консьюмерами в одной группе. Если консьюмеров больше, чем партиций, часть из них будет простаивать. Также масштабирование ограничено стоимостью ребалансировок. Частые изменения состава группы могут временно останавливать обработку.
Consumer group — это мощный механизм параллельной обработки, но у него есть жёсткие архитектурные ограничения, которые важно понимать заранее.
Consumer group scaling — это способность группы консьюмеров параллельно обрабатывать данные за счёт распределения партиций.
Основное и самое важное правило Kafka:
максимальный параллелизм consumer group = количество партиций.
Следствия:
5 партиций → максимум 5 активных консьюмеров;
10 консьюмеров при 5 партициях → 5 будут простаивать.
Это фундаментальное ограничение, которое нельзя обойти настройками.
При изменении состава группы происходит rebalance:
все консьюмеры временно останавливаются;
offsets перераспределяются;
партиции назначаются заново.
Проблемы:
при больших группах ребаланс может занимать заметное время;
частые рестарты ухудшают latency и throughput.
Если бизнес-логика требует строгий порядок:
сообщения с одним ключом должны идти в одну партицию;
это снижает гибкость распределения нагрузки.
Например:
один «горячий» ключ может перегрузить одну партицию;
остальные консьюмеры будут недогружены.
Даже если Kafka масштабируется, обработка может упираться в:
внешние API;
базу данных;
синхронные операции.
В этом случае:
добавление консьюмеров не даст прироста;
узкое место находится вне Kafka.
При проектировании:
закладывайте запас по числу партиций;
избегайте частых изменений состава группы;
следите за «горячими» ключами.
Consumer group масштабируется только в пределах количества партиций и стоимости ребалансировок. Для эффективной работы важно заранее планировать партиционирование и учитывать ограничения бизнес-логики.