Гайды

RabbitMQ vs Kafka: что выбрать

Матрица моделей, когда нужен лог и replay, когда очередь задач и маршрутизация, гибриды и пять вопросов для решения.

~8 мин чтения

RabbitMQ vs Kafka: что выбрать

Оба продукта двигают сообщения между сервисами, но модель и компромиссы разные. Ниже — практичные критерии без «Kafka на всё». Детали: Apache Kafka: топики, партиции и оффсеты, RabbitMQ: установка и обменники; лёгкая альтернатива — Введение в NATS.


1. Краткая матрица

КритерийKafkaRabbitMQ
МодельРаспределённый лог (топики/партиции)Брокер очередей (exchange → queue)
Потребители«Перематывают» лог по offsetСообщение удаляется после ack (классика)
RetentionДолго хранить и перечитыватьКороткие буферы; не «data lake»
Пропускная способностьОчень высокая для append-onlyВысокая, но другой профиль нагрузки
Задержкамиллисекунды–десяткичасто ниже для task queue
МаршрутизацияПартиция по ключуГибкие exchange/bindings
ОперационкаТяжёлый кластер, ZK/KRaftПроще старт, Erlang VM

2. Когда логичнее Kafka

  1. Event sourcing / audit / replay — нужен долгий лог и несколько независимых consumer group'ов на один поток.
  2. Высокий объём событий аналитики, телеметрии, CDC.
  3. Стриминговая обработка (Kafka Streams, Flink, чтение с offset).

3. Когда логичнее RabbitMQ

  1. Task queue — job на воркеры, routing по типам задач, priority, TTL.
  2. Сложная маршрутизация без желания проектировать партиции.
  3. Низкая задержка RPC-стиль request/reply (reply-to queue).
  4. Команда уже знает AMQP и не нужен petabyte-log.

4. Надёжность и семантика

Обе системы дают подтверждения и персистентность при правильной конфигурации. Exactly-once между двумя сервисами в общем случае требует идемпотентности приложения в обеих мирах. В Kafka для «ядовитых» сообщений часто выделяют отдельный топик — DLQ и ошибки.


5. Гибриды

Часто: Kafka как system of record событий, Rabbit как внутренний task bus для микросервиса — не смешивайте без явной границы ответственности.


6. Решение за 5 вопросов

  1. Нужен ли replay и долгая история? → да = ближе к Kafka.
  2. Нужен ли маршрут по паттернам и много очередей-подписчиков на один тип? → Rabbit.
  3. Объём > миллионы msg/сек устойчиво? → чаще Kafka.
  4. Критична минимальная latency очереди задач? → Rabbit конкурентоспособен.
  5. Кто будет эксплуатировать кластер ночью? → честно оцените навык.

7. Порядок и дубликаты

Kafka: порядок гарантирован внутри партиции; глобальный порядок — дизайн ключа. Rabbit: порядок в очереди при одном consumer; при нескольких — без доп. ключей порядок не гарантирован. Exactly-once end-to-end в обоих мирах обычно = идемпотентность на потребителе + корректные ack.


8. Наблюдаемость и схемы

В Kafka — broker metrics, consumer lag, under-replicated partitions. В Rabbit — queue depth, unacked, memory/disk alarms. Схемы событий — Avro и Schema Registry для Kafka; в Rabbit чаще JSON + контракты в коде или отдельный реестр сообщений.


9. Альтернативы «вне дихотомии»

Redpanda, Apache Pulsar, облачные Kinesis / Pub/Sub — другие компромиссы по API, операционке и стоимости. Выбирайте после фиксации RPO/RTO, бюджета на managed-сервис и требований к ordering и replay, а не по названию бренда.


Дальше: NATS · Redis Pub/Sub и очереди · Тег «Очереди»