Когда в Spring выбрать AMQP/RabbitMQ, а когда Kafka?
- RabbitMQ или Kafka в Spring-проекте?
RabbitMQ (Spring AMQP) — очередь задач: подтверждение каждого сообщения, гибкая маршрутизация, приоритеты, отложенная доставка, задачи разной длительности. Kafka (Spring Kafka) — журнал событий: хранение и перечитывание, много независимых потребителей, порядок по ключу, большой поток.
- Фоновые задачи — RabbitMQ; шина доменных событий и CDC — Kafka
- Медленная задача в Kafka задерживает партицию
- В RabbitMQ нет перечитывания истории
А ещё Spring Cloud Stream позволяет менять брокер конфигурацией — но модели разные, абстракция протекает
Подробно
Сводится к semantics сообщения. Команда «сделай это, дальше забудь» — work queue с routing, ack/nack, TTL/delay и DLQ, это RabbitMQ. Событие «вот что произошло, кто хочет — переиграет» — лог с retention и replay, независимыми consumer groups, это Kafka. Команды в Kafka и события в RabbitMQ возможны, но идут против дизайна.
Что хотят услышать
- Различие моделей и сценарии.
- Конкретные недостатки каждого не в своей роли.
Частые ошибки
- Выбирать брокер по популярности.
- Ожидать Kafka-style replay от RabbitMQ без отдельного хранения.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Kafka — для фоновых задач разной длительности
- ✗RabbitMQ — когда нужно перечитать историю событий за неделю
- ✓RabbitMQ — для задач с подтверждением и маршрутизацией; Kafka — журнал событий с перечитыванием
- ✗Разницы нет: Spring Cloud Stream делает модели одинаковыми, и брокер выбирают по привычке команды
Что спросят дальше
- Что такое DLX в RabbitMQ?
- Почему Kafka DLT — отдельный topic?
Разбор темы
- Spring AMQP и RabbitMQ
RabbitTemplate, @RabbitListener, exchanges, bindings, manual ack, retries, DLQ и prefetch.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.