Kafka или RabbitMQ: когда что
↑ 5.4 Очереди и брокеры: Kafka, RabbitMQ · ← Предыдущая · → Следующая
Зачем это на собесе
Сравнение брокеров — популярный архитектурный вопрос.
Объяснение
| Критерий | Kafka | RabbitMQ |
|---|---|---|
| Модель | распределённый лог | брокер очередей с маршрутизацией |
| Хранение | хранит N дней, читают многократно | удаляет после ack |
| Порядок | внутри партиции | внутри очереди (при одном потребителе) |
| Масштабирование | партиции, миллионы событий/с | вертикально/кластеры, десятки тысяч сообщений/с |
| Маршрутизация | простая (топик, ключ) | гибкая (exchange, binding, headers) |
| Повторное чтение / replay | да | нет |
| Задержки, приоритеты, TTL | ограниченно | из коробки |
| Сложность эксплуатации | выше (KRaft, партиции) | ниже |
| Типичное применение | event streaming, аналитика, event sourcing, интеграция потоков | задачи, RPC, фоновые джобы, маршрутизация команд |
Практическое правило:
- Kafka — потоки событий, высокий объём, переигрываемая история, несколько независимых читателей.
- RabbitMQ — очереди задач, сложная маршрутизация, приоритеты, delayed, небольшой и средний объём.
- Иногда нужны оба, но не «на всякий случай».
Другие варианты: Redis Streams, NATS/JetStream, Azure Service Bus, AWS SQS/SNS, Pulsar.
Нюансы и подводные камни
- Kafka не подходит как очередь задач с индивидуальным ack, приоритетами и delay.
- RabbitMQ не заменяет журнал событий: нельзя «перемотать» историю.
- Выбор диктуют требования, а не мода: объём, порядок, ретеншн, команда.
- Абстракции (MassTransit) помогают переключаться, но не скрывают модель брокера.
Практика
- Опишите требования вашего проекта и выберите брокер с обоснованием (ADR).
- Сравните throughput одинакового сценария в обоих брокерах.
- Спроектируйте, что вы делаете, если нужен replay в RabbitMQ.
Вопросы с ответами
Когда Kafka, а когда RabbitMQ?
Kafka — потоки событий и replay при высоких объёмах; RabbitMQ — очереди задач и гибкая маршрутизация.
Можно ли переигрывать сообщения в RabbitMQ?
Нет, после ack сообщение удаляется; для replay нужен лог (Kafka, Streams).