Карта / Kafka / Зачем очереди

Зачем очереди

Очередь сообщений — посредник между сервисами: один кладёт сообщение, другой забирает, когда готов. Вместо прямого синхронного вызова (“кухня” звонит “официанту” и ждёт ответа), оба работают независимо через общую “доску заказов”.

Синхронно (плохо) Orders ждёт Email упал = всё встало Асинхронно (хорошо) Orders кладёт Очередь msg msg msg Kafka / RabbitMQ забирает Email когда готов
Копнуть глубже

Главные выгоды очередей:

  • Развязка во времени. Отправителю не нужно ждать, пока получатель обработает сообщение — положил и пошёл дальше.
  • Устойчивость к сбоям. Если получатель временно недоступен, сообщение не теряется — ждёт в очереди, пока получатель не восстановится.
  • Сглаживание нагрузки. Если вдруг пришла тысяча запросов разом, очередь принимает их все, а получатель обрабатывает в своём темпе, не падая от перегрузки.

Когда очередь не нужна. Если результат операции обязателен прямо сейчас для ответа пользователю (например, “проверить остаток на складе перед подтверждением заказа”) — это синхронный запрос (обычный REST-вызов), очередь тут не подходит, она для случаев, где можно подождать или where реакция не требуется немедленно (отправка email, обновление аналитики, уведомления).

Kafka и RabbitMQ — два самых популярных брокера сообщений в Java-экосистеме, оба реализуют идею очереди, но по-разному (подробное сравнение — в теме «Kafka vs RabbitMQ»).

🎤 Закрыл тему, если можешь объяснить:
• зачем нужна очередь сообщений вместо прямого синхронного вызова;
• когда очередь не подходит и нужен обычный синхронный запрос (если дошёл до 2-го слоя).