Что вы выберете для очереди фоновых задач, а что для шины событий между сервисами — RabbitMQ или Kafka?
- Когда RabbitMQ лучше Kafka?
Очередь задач — RabbitMQ (или SQS): подтверждение каждого сообщения, повторы, DLX, приоритеты, отложенная доставка, медленная задача не блокирует остальные. Шина событий — Kafka: хранение и перечитывание, много независимых потребителей, порядок по ключу, большой поток.
- Задачи разной длительности в Kafka блокируют партицию — head-of-line blocking
- В RabbitMQ нет перечитывания истории и сложнее масштабировать огромный поток
- Часто в одной системе оба: Kafka для событий, RabbitMQ или очереди для задач
А ещё Решающий вопрос — нужна ли история и сколько независимых потребителей
Подробно
Фоновые задачи (сгенерировать PDF, отправить письмо, обработать видео): каждую задачу должен взять один воркер, подтвердить после выполнения, при сбое — повторить, после N попыток — отложить в DLQ. Задачи разной длительности. RabbitMQ делает это из коробки: конкурирующие потребители на одной очереди, prefetch для справедливого распределения, DLX, TTL, приоритеты, отложенная доставка (плагин). В Kafka одна медленная задача задерживает всю партицию, а повторы требуют отдельных топиков.
Шина событий («заказ создан», «платёж прошёл»): несколько сервисов реагируют независимо, новый сервис может прочитать историю, нужен порядок событий сущности, объёмы большие. Kafka: журнал с хранением, группы потребителей, порядок по ключу, CDC и потоковая обработка. В RabbitMQ пришлось бы держать очередь на каждого подписчика, а прочитанное пропадает.
Другие критерии: эксплуатация (управляемые сервисы), экосистема, требования к задержке (RabbitMQ обычно ниже при малых объёмах), объём (Kafka — на порядки больше).
Что хотят услышать
- Выбор по сценарию с обоснованием.
- Почему Kafka неудобна для задач разной длительности.
- Почему RabbitMQ неудобен для шины событий с историей.
Частые ошибки
- Выбирать по «что быстрее», без учёта модели.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Всегда Kafka — она быстрее
- ✓Задачи с подтверждением и маршрутизацией — RabbitMQ; шина событий с replay — Kafka
- ✗Для фоновых задач Kafka — в ней есть приоритеты сообщений
- ✗Всегда RabbitMQ — Kafka не гарантирует доставку
Что спросят дальше
- Что такое exchange в RabbitMQ?
- Когда Kafka как очередь неудобна?
Разбор темы
- RabbitMQ, SQS и классические очереди
Модель exchange/binding/queue, ack/nack и publisher confirms, prefetch, DLQ через DLX, отложенные сообщения, SQS Standard vs FIFO и visibility timeout.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.