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

Что вы выберете для очереди фоновых задач, а что для шины событий между сервисами — RabbitMQ или Kafka?

MiddleRabbitMQ и SQSKafkaRabbitMQ
Ещё спрашивают так:
  • Когда RabbitMQ лучше Kafka?
Коротко

Очередь задач — RabbitMQ (или SQS): подтверждение каждого сообщения, повторы, DLX, приоритеты, отложенная доставка, медленная задача не блокирует остальные. Шина событий — Kafka: хранение и перечитывание, много независимых потребителей, порядок по ключу, большой поток.

  • Задачи разной длительности в Kafka блокируют партицию — head-of-line blocking
  • В RabbitMQ нет перечитывания истории и сложнее масштабировать огромный поток
  • Часто в одной системе оба: Kafka для событий, RabbitMQ или очереди для задач

А ещё Решающий вопрос — нужна ли история и сколько независимых потребителей

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

Подробно

Фоновые задачи (сгенерировать PDF, отправить письмо, обработать видео): каждую задачу должен взять один воркер, подтвердить после выполнения, при сбое — повторить, после N попыток — отложить в DLQ. Задачи разной длительности. RabbitMQ делает это из коробки: конкурирующие потребители на одной очереди, prefetch для справедливого распределения, DLX, TTL, приоритеты, отложенная доставка (плагин). В Kafka одна медленная задача задерживает всю партицию, а повторы требуют отдельных топиков.

Шина событий («заказ создан», «платёж прошёл»): несколько сервисов реагируют независимо, новый сервис может прочитать историю, нужен порядок событий сущности, объёмы большие. Kafka: журнал с хранением, группы потребителей, порядок по ключу, CDC и потоковая обработка. В RabbitMQ пришлось бы держать очередь на каждого подписчика, а прочитанное пропадает.

Другие критерии: эксплуатация (управляемые сервисы), экосистема, требования к задержке (RabbitMQ обычно ниже при малых объёмах), объём (Kafka — на порядки больше).

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

  • Выбор по сценарию с обоснованием.
  • Почему Kafka неудобна для задач разной длительности.
  • Почему RabbitMQ неудобен для шины событий с историей.

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

  • Выбирать по «что быстрее», без учёта модели.

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

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

Показать варианты и ответ
  • ✓Фоновые задачи с подтверждением каждой и сложной маршрутизацией — RabbitMQ; шина событий с хранением, перечитыванием и многими потребителями — Kafka
  • ✗Всегда Kafka — она быстрее
  • ✗Всегда RabbitMQ — Kafka не гарантирует доставку
  • ✗Для фоновых задач Kafka, потому что в ней есть приоритеты сообщений

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

  • Что такое exchange в RabbitMQ?
  • Когда Kafka как очередь неудобна?

Разбор темы

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

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

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

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

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