У топика 6 партиций. Что даст параметр concurrency = 3 у @KafkaListener и что произойдёт при concurrency = 10?
- Что делает concurrency в @KafkaListener?
concurrency = 3 — три потребителя в группе внутри экземпляра, по 2 партиции на каждого. При concurrency = 10 и 6 партициях 4 потребителя простаивают: партиция в группе читается одним потребителем.
- Учитывать все экземпляры: 3 пода × concurrency 3 = 9 потребителей на 6 партиций
- Больше параллелизма — больше партиций или параллельная обработка внутри потребителя
- Каждый потребитель — свой поток
А ещё Порядок сохраняется внутри партиции
Подробно
Listener container создаёт указанное число потребителей внутри одной группы, и брокер распределяет между ними партиции. Поскольку партиция в каждый момент принадлежит ровно одному потребителю группы, число партиций задаёт потолок параллелизма — потребители сверх этого числа просто не получат работы, оставаясь резервом на случай отказа. Отсюда практическое следствие для планирования: масштабируемость закладывается при создании топика выбором количества партиций, а увеличить их позже можно, но это ломает привязку ключей к партициям и, значит, гарантию порядка для существующих ключей. Порядок при этом гарантирован только внутри партиции, поэтому связанные события отправляют с одним ключом.
Что хотят услышать
- Связь concurrency и партиций.
- Простаивающие потребители.
- Суммарно по экземплярам.
Частые ошибки
- Наращивать concurrency сверх числа партиций и ждать роста пропускной способности.
- Забывать, что увеличение числа партиций меняет распределение ключей.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Каждый из 3 потоков будет читать все 6 партиций параллельно, деля сообщения
- ✓3 потребителя по 2 партиции; при 10 лишние 4 простаивают без партиций
- ✗При concurrency = 10 партиции разделятся между потребителями дробно, по частям
- ✗Параметр влияет только на число потоков обработки, но не на распределение партиций
Что спросят дальше
- Что произойдёт с порядком сообщений при добавлении партиций?
- Как ребалансировка влияет на обработку?
Разбор темы
- Spring Kafka
KafkaTemplate, @KafkaListener, listener containers, offset ack, error handling, retries и DLT.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.