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

У топика 6 партиций. Что даст параметр concurrency = 3 у @KafkaListener и что произойдёт при concurrency = 10?

MiddleSpring KafkaKafka
Ещё спрашивают так:
  • Что делает concurrency в @KafkaListener?
Коротко

concurrency = 3 — три потребителя в группе внутри экземпляра, по 2 партиции на каждого. При concurrency = 10 и 6 партициях 4 потребителя простаивают: партиция в группе читается одним потребителем.

  • Учитывать все экземпляры: 3 пода × concurrency 3 = 9 потребителей на 6 партиций
  • Больше параллелизма — больше партиций или параллельная обработка внутри потребителя
  • Каждый потребитель — свой поток

А ещё Порядок сохраняется внутри партиции

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

Подробно

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

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

  • Связь concurrency и партиций.
  • Простаивающие потребители.
  • Суммарно по экземплярам.

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

  • Наращивать concurrency сверх числа партиций и ждать роста пропускной способности.
  • Забывать, что увеличение числа партиций меняет распределение ключей.

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

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

Показать варианты и ответ
  • ✓Будет создано 3 потребителя по 2 партиции на каждого; при 10 лишние потребители останутся без партиций и будут простаивать
  • ✗Каждый из 3 потоков будет читать все 6 партиций параллельно
  • ✗При concurrency = 10 партиции разделятся между потребителями дробно
  • ✗Параметр влияет только на число потоков обработки, но не на распределение партиций

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

  • Что произойдёт с порядком сообщений при добавлении партиций?
  • Как ребалансировка влияет на обработку?

Разбор темы

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

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

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

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

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