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

Что произойдёт, если у двух экземпляров сервиса в Spring Cloud Stream не задать одинаковую consumer group для входящего binding?

MiddleSpring Cloud StreamSpring Cloud
Ещё спрашивают так:
  • Почему сообщение обработалось на всех экземплярах?
Коротко

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

  • spring.cloud.stream.bindings.<name>-in-0.group=billing — экземпляры конкурируют
  • Анонимная группа в Kafka ещё и начинает с latest — пропуск сообщений при перезапуске
  • Разные сервисы — разные группы (pub/sub)

А ещё Анонимные группы подходят только для «живых» уведомлений

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

Подробно

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

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

  • Поведение без группы.
  • Как задать группу и что это даёт.

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

  • Полагаться на умолчание и обнаружить дубли только после масштабирования.
  • Использовать анонимную группу там, где сообщения нельзя терять.

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

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

Показать варианты и ответ
  • ✓Каждый экземпляр получит собственную анонимную группу и обработает все сообщения — вместо распределения нагрузки получится дублирование
  • ✗Сообщения будут распределены между экземплярами поровну
  • ✗Приложение не запустится без явной группы
  • ✗Сообщения получит только тот экземпляр, который подключился первым

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

  • Когда широковещательная рассылка оправдана?
  • Как partitioning сочетается с consumer group?

Разбор темы

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

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

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

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

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