Вопрос с собеседования · Брокеры сообщений

Что произойдёт, если потребителей в consumer group больше, чем партиций в топике?

SeniorKafka ConsumerKafka
Ещё спрашивают так:
  • Почему добавление потребителей Kafka не ускорило обработку?
Коротко

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

  • 6 партиций и 10 потребителей — 4 без работы (держат резерв на случай отказа)
  • Ускорить: больше партиций или параллельная обработка внутри потребителя по ключу
  • Увеличение партиций меняет распределение ключей — осторожно с порядком

А ещё Kafka Queues (KIP-932, share groups) снимают это ограничение для очередной модели

Подробно

Координатор группы назначает каждую партицию одному участнику. Если участников больше, чем партиций, части из них не достаётся ничего: они подключены, шлют heartbeat, но не получают сообщений. При падении работающего потребителя один из простаивающих подхватит его партиции — это горячий резерв, но не ускорение.

Как увеличить пропускную способность:

  • больше партиций — заложить с запасом при создании топика; увеличение потом меняет hash(key) % N и нарушает порядок для существующих ключей на время перехода;
  • параллельная обработка внутри потребителя — читать партицию одним потоком, а обрабатывать в пуле, группируя по ключу, чтобы сохранить порядок сущности (библиотеки вроде Confluent Parallel Consumer);
  • ускорить обработку — пакетная запись в базу, асинхронные вызовы.

Share groups (KIP-932, Kafka 4.x) — новая модель, где несколько потребителей читают одну партицию с подтверждением отдельных сообщений — очередная семантика без жёсткой привязки.

Что хотят услышать

  • Лишние потребители простаивают и почему.
  • Как реально ускорить обработку.
  • Цена увеличения числа партиций.

Частые ошибки

  • Масштабировать потребителей сверх числа партиций и ждать эффекта.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Kafka автоматически создаст недостающие партиции
  • ✗Партиции будут читаться несколькими потребителями параллельно
  • ✗Лишние потребители получат копии всех сообщений
  • ✓Лишние потребители простаивают: партицию в группе читает только один потребитель

Что спросят дальше

  • Что такое rebalance?
  • Когда offset commit делать до или после обработки?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования