Как consumer group в Kafka масштабирует потребление?
- Как масштабировать обработку сообщений в Kafka?
Партиции топика делятся между участниками группы: каждая партиция в группе читается ровно одним потребителем. Добавили потребителя — партиции перераспределились.
- Максимальный параллелизм группы = число партиций
- Разные группы читают топик независимо, каждая получает все сообщения
- Порядок сохраняется внутри партиции, потому что её читает один потребитель
А ещё Число партиций закладывают с запасом: увеличение потом меняет распределение ключей
Подробно
Как работает. Потребители с одинаковым group.id образуют группу. Координатор группы на брокере назначает каждому подмножество партиций (стратегии range, round-robin, sticky, cooperative-sticky). Каждая партиция — ровно одному потребителю группы, и он обрабатывает её сообщения по порядку.
Масштабирование:
- больше потребителей — меньше партиций на каждого и выше параллелизм;
- потребителей больше, чем партиций, — лишние простаивают;
- нужно больше параллелизма, чем партиций, — увеличить число партиций (с последствиями для порядка по ключу) или распараллелить обработку внутри потребителя (по ключу, чтобы сохранить порядок).
Несколько групп — механизм pub/sub: сервис уведомлений и сервис аналитики читают тот же топик своими группами, каждая получает всё.
Ребаланс при изменении состава группы приостанавливает обработку; cooperative-sticky переназначает только нужные партиции.
Выбор числа партиций: по целевой пропускной способности (пропускная способность топика / пропускная способность одного потребителя) с запасом на рост.
Что хотят услышать
- Партиция на одного потребителя в группе.
- Предел параллелизма — число партиций.
- Независимые группы как pub/sub.
- Ребаланс и выбор числа партиций — плюс.
Частые ошибки
- Ожидать ускорения от потребителей сверх числа партиций.
- Путать группу с отдельным потребителем.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Партиции топика делятся между consumer'ами группы; параллелизм ограничен числом партиций
- ✗Каждое сообщение дублируется всем consumer'ам группы
- ✗Каждый consumer группы читает каждую партицию целиком
- ✗Consumer'ы делят между собой обработку каждой записи по байтам
Что спросят дальше
- Как выбрать число партиций?
- Что такое sticky-assignor?
Разбор темы
- Kafka Consumer и consumer group
Группа и распределение партиций, poll-цикл, heartbeat и таймауты, модели commit offset, ребаланс и роль идемпотентности.
Связанные вопросы
- Зачем потребителей объединяют в consumer group? Junior
- Что произойдёт, если потребителей в consumer group больше, чем партиций в топике? Senior
- Что произойдёт с гарантией порядка при увеличении числа партиций в существующем топике? Senior
- Consumer lag стабильно растёт. Что это означает и с чего начать разбор? Middle
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.