Получить доступ

Как consumer group в Kafka масштабирует потребление?

MiddleKafka ConsumerKafka
Ещё спрашивают так:
  • Как масштабировать обработку сообщений в Kafka?
Коротко

Партиции топика делятся между участниками группы: каждая партиция в группе читается ровно одним потребителем. Добавили потребителя — партиции перераспределились.

  • Максимальный параллелизм группы = число партиций
  • Разные группы читают топик независимо, каждая получает все сообщения
  • Порядок сохраняется внутри партиции, потому что её читает один потребитель

А ещё Число партиций закладывают с запасом: увеличение потом меняет распределение ключей

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Как работает. Потребители с одинаковым group.id образуют группу. Координатор группы на брокере назначает каждому подмножество партиций (стратегии range, round-robin, sticky, cooperative-sticky). Каждая партиция — ровно одному потребителю группы, и он обрабатывает её сообщения по порядку.

Масштабирование:

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

Несколько групп — механизм pub/sub: сервис уведомлений и сервис аналитики читают тот же топик своими группами, каждая получает всё.

Ребаланс при изменении состава группы приостанавливает обработку; cooperative-sticky переназначает только нужные партиции.

Выбор числа партиций: по целевой пропускной способности (пропускная способность топика / пропускная способность одного потребителя) с запасом на рост.

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

  • Партиция на одного потребителя в группе.
  • Предел параллелизма — число партиций.
  • Независимые группы как pub/sub.
  • Ребаланс и выбор числа партиций — плюс.

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

  • Ожидать ускорения от потребителей сверх числа партиций.
  • Путать группу с отдельным потребителем.

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

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

Показать варианты и ответ
  • ✗Сообщения дублируются всем consumer'ам группы для параллельной обработки
  • ✓Партиции темы распределяются между consumer'ами группы (1 партиция → 1 consumer в группе); параллелизм ограничен числом партиций
  • ✗Каждый consumer группы читает каждую партицию целиком
  • ✗Consumer'ы делят между собой обработку каждой записи по байтам

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

  • Как выбрать число партиций?
  • Что такое sticky-assignor?

Разбор темы

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

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем