Gymterview
middle

Зачем нужен Message Broker? В чём разница между очередью и топиком?

Message Broker (брокер сообщений) – промежуточное ПО, которое принимает, хранит и доставляет сообщения между компонентами системы. Это как почтовое отделение: отправитель бросает письмо в ящик и уходит, а почта доставит его получателю, даже если тот сейчас не дома.

Зачем нужен

  • Слабая связанность – отправитель не знает получателя и не зависит от него.
  • Асинхронность – отправитель не ждёт обработки, что снижает время отклика.
  • Буферизация – сглаживание пиков нагрузки: если получатель временно не справляется, сообщения копятся в очереди.
  • Гарантия доставки – сообщение не потеряется при временном сбое получателя.
  • Масштабируемость – можно добавлять потребителей динамически.

Очередь (Queue) vs Топик (Topic)

Пример
Очередь (Queue) — Point-to-Point:
Каждое сообщение обрабатывается ОДНИМ потребителем.

Producer → [  msg3 | msg2 | msg1  ] → Consumer A  (получит msg1)
                                    → Consumer B  (получит msg2)
                                    → Consumer C  (получит msg3)

Топик (Topic) — Publish/Subscribe:
Каждое сообщение получают ВСЕ подписчики (группы).

                              ┌→ Consumer Group A (получит ВСЕ сообщения)
Producer → [ Topic ] ─────────┼→ Consumer Group B (получит ВСЕ сообщения)
                              └→ Consumer Group C (получит ВСЕ сообщения)
Аспект Очередь (Queue) Топик (Topic)
Модель Point-to-Point Pub/Sub
Получатели Один на сообщение Все подписчики
Сценарий Обработка задач (worker pool) Уведомление нескольких систем
Пример Обработка платежей (каждый платёж обрабатывается одним воркером) Событие “Платёж совершён” – отправить уведомление, обновить аналитику, проверить фрод

Популярные брокеры

Брокер Модель Особенности
Apache Kafka Topic (лог) Высокая пропускная способность, хранение истории, replay
RabbitMQ Queue / Topic (exchange) Гибкая маршрутизация, поддержка AMQP
ActiveMQ Queue / Topic JMS-совместимый, зрелый
Redis Streams Topic (лог) Простой, быстрый, встроен в Redis

Kafka: Consumer Groups

В Kafka каждый Consumer Group – это логический подписчик. Внутри группы сообщения распределяются между потребителями (как очередь), но между группами – доставляются всем (как топик). Это позволяет совмещать оба подхода в одной системе.

На собеседовании: Интервьюер ждёт чёткого понимания разницы Queue vs Topic и умения привести пример, когда нужен каждый из них. Частая ошибка – путать Consumer Group в Kafka с обычной очередью.