Перейти к содержанию

RabbitMQ vs Apache Kafka

RabbitMQ и Kafka — это два популярных брокера сообщений, но у них разные архитектуры, подходы и задачи, которые они решают.


Описание

Система Описание
RabbitMQ Брокер сообщений, реализующий модель очередей (message queue), основан на протоколе AMQP. Подходит для традиционной асинхронной коммуникации.
Kafka Система обработки событий и журнал сообщений (distributed log), спроектирована для потоковой обработки данных, масштабируемости и долговременного хранения.

Архитектурные отличия

Критерий RabbitMQ Kafka
Тип системы Очередь сообщений (Queue) Журнал событий (Log)
Протокол AMQP, STOMP, MQTT Собственный бинарный протокол
Хранение сообщений Временное (удаляются после обработки) Постоянное (настраиваемое хранение по времени/объёму)
Потребление Каждое сообщение потребляется один раз Одно сообщение может быть прочитано многими подписчиками
Порядок сообщений Не гарантирован Гарантирован в пределах partition
Поддержка отложенных сообщений Да (через плагины/очереди) Нет напрямую (нужно обрабатывать на клиенте)
Подтверждение доставки Обязательно (ack/nack) Управляется смещением (offset)
Расширяемость Средняя Очень высокая (кластер из брокеров и партиций)
Подходящий сценарий Task queues, RPC, микросервисы Потоковая аналитика, обработка событий, логирование

Примеры использования

RabbitMQ

  • Асинхронная передача задач между микросервисами.

  • Реализация отложенных задач (например, напоминания).

  • Отправка уведомлений, email.

  • RPC-запросы между сервисами.

Kafka

  • Потоковая обработка данных (stream processing).

  • Хранение логов и событий.

  • Реализация event sourcing.

  • Интеграция с Big Data и аналитикой (например, Apache Spark, Flink).


Пример архитектуры

RabbitMQ:

Producer → Queue → Consumer
Сообщение удаляется после обработки

Kafka:

Producer → Topic → Consumer Group
Сообщения хранятся, пока не истечёт TTL

Таблица сравнения

Характеристика RabbitMQ Kafka
Скорость Подходит для небольших нагрузок Высокая пропускная способность
Надёжность доставки Подтверждение от клиента Гибкое управление offset’ами
Поддержка повторного чтения Нет (если не сконфигурировано) Да (offset управляется вручную)
Подписчики Один потребитель на сообщение Множественные группы потребителей
Инструменты мониторинга Хорошие (веб-интерфейс) Требует настройки (например, Prometheus + Grafana)

Вывод

  • RabbitMQ — хорош для традиционной очереди задач, где важна простота и подтверждение доставки.

  • Kafka — оптимален для потоковой обработки данных в масштабируемых распределённых системах.