← Назад к списку
ТехническаяBackendMiddle

Чем 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 гарантирован только внутри партиции
  • Забывают про ограничение: консьюмеров в группе больше, чем партиций, — лишние простаивают

ИП Кочкин Алексей Сергеевич · ИНН 390509026279 · ОГРНИП 325390000030973 · jiniys2005@yandex.ru