Чем Kafka отличается от RabbitMQ и когда вы выберете каждую из них?
Короткий ответ
- Kafka — распределённый лог: сообщения хранятся, читатели двигают offset
- RabbitMQ — умный брокер: роутинг, очереди, сообщение удаляется после ack
- Kafka: перечитывание истории, несколько независимых групп консьюмеров
- Порядок в Kafka гарантируется внутри партиции по ключу
- RabbitMQ проще для задач, RPC и сложного роутинга
- Kafka — для событийных потоков, аналитики, высокой пропускной способности
Kafka — журнал событий для потоков и ретроспективы, RabbitMQ — классический брокер задач с гибким роутингом.
Как сказать вслух
пример ответаKafka — это по сути распределённый журнал: сообщения пишутся в партиции топика и хранятся заданный срок, а потребители сами двигают свой offset и могут перечитать историю. RabbitMQ — классический брокер: он маршрутизирует сообщения по очередям, а после подтверждения обработки сообщение удаляется. Kafka я возьму для потоков событий, где нужны большая пропускная способность и несколько независимых потребителей. RabbitMQ — для очередей задач и сложной маршрутизации.
Подробный ответ
Основной ответ
Kafka хранит сообщения в партиционированном append-only логе с настраиваемой ретенцией; потребители организованы в consumer groups, каждая группа читает топик независимо, позиция — это offset, который можно откатить. Порядок гарантируется только внутри партиции, ключ сообщения определяет партицию. Это даёт горизонтальную масштабируемость, переиграть события заново и паттерны вроде event sourcing и CDC. RabbitMQ (AMQP) — брокер с exchange-ами (direct, topic, fanout, headers), очередями, приоритетами, TTL, dead-letter очередями и подтверждениями; сообщение после ack исчезает. Он удобен для распределения задач между воркерами, отложенных задач и сценариев, где нужна логика доставки на стороне брокера. Kafka сложнее в эксплуатации, но на порядки производительнее на потоках; RabbitMQ проще поднять и понять.
Ключевые моменты
- Модель хранения. Kafka — лог с ретенцией и перечитыванием; RabbitMQ — очередь, сообщение живёт до подтверждения обработки.
- Порядок и партиции. В Kafka порядок только внутри партиции: события одного заказа шлют с ключом orderId, чтобы они попали в одну партицию.
- Масштабирование потребителей. В Kafka число активных консьюмеров в группе ограничено числом партиций — это надо закладывать заранее.
- Роутинг. У RabbitMQ богатая маршрутизация на брокере; в Kafka логика распределения проста, фильтрация — на стороне потребителя.
Практический контекст
Типовой продакшен: RabbitMQ (или совсем лёгкие очереди) для фоновых задач — письма, генерация отчётов, ресайз картинок; Kafka — как шина событий между микросервисами, для аналитики и интеграции через CDC. Интервьюер проверяет понимание моделей, а не названия: хороший маркер — объяснить, почему «несколько команд хотят независимо читать одни и те же события» — это про Kafka, а «раздать 10 000 задач по воркерам с ретраями» — про RabbitMQ.
Частые ошибки
- Говорят «Kafka просто быстрее», не понимая разницы моделей лог vs очередь
- Не знают, что порядок в Kafka гарантирован только внутри партиции
- Забывают про ограничение: консьюмеров в группе больше, чем партиций, — лишние простаивают