Что произойдёт, если у двух экземпляров сервиса в Spring Cloud Stream не задать одинаковую consumer group для входящего binding?
- Почему сообщение обработалось на всех экземплярах?
Без общей группы каждый экземпляр получает анонимную группу и становится самостоятельным подписчиком: сообщение обработается столько раз, сколько экземпляров.
spring.cloud.stream.bindings.<name>-in-0.group=billing— экземпляры конкурируют- Анонимная группа в Kafka ещё и начинает с latest — пропуск сообщений при перезапуске
- Разные сервисы — разные группы (pub/sub)
А ещё Анонимные группы подходят только для «живых» уведомлений
Подробно
Consumer group реализует семантику конкурирующих потребителей: внутри одной группы сообщение достаётся ровно одному участнику, а разные группы получают собственную копию — это и есть разница между распределением нагрузки и широковещательной рассылкой. При отсутствии явной группы Spring Cloud Stream создаёт анонимную и, как правило, недолговечную подписку, поэтому при масштабировании появляются дубли, а при перезапуске теряются сообщения, пришедшие в простое. Практическое правило: для любого потребителя в production группа задаётся явно, а широковещательная модель выбирается сознательно, когда каждому экземпляру действительно нужна своя копия — например, для инвалидации локального кэша.
Что хотят услышать
- Поведение без группы.
- Как задать группу и что это даёт.
Частые ошибки
- Полагаться на умолчание и обнаружить дубли только после масштабирования.
- Использовать анонимную группу там, где сообщения нельзя терять.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Сообщения будут автоматически распределены между экземплярами поровну
- ✓Каждый экземпляр получит свою анонимную группу и обработает все сообщения
- ✗Приложение не запустится без явной группы
- ✗Сообщения получит только тот экземпляр, который подключился первым
Что спросят дальше
- Когда широковещательная рассылка оправдана?
- Как partitioning сочетается с consumer group?
Разбор темы
- Spring Cloud Stream
Binder abstraction, functional model, bindings, consumer groups, partitioning и trade-offs поверх Kafka/RabbitMQ.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.