Найти тему
VK Cloud

RabbitMQ или Apache Kafka: какой брокер сообщений подойдет для вашего проекта

Оглавление

В сложной логической системе, системе с объемными вычислительными задачами и потоками событий необходимо организовать распределенную архитектуру и наладить коммуникацию между ее компонентами.

Для такой архитектуры чаще всего используют одно из двух решений: RabbitMQ или Apache Kafka. Разберемся, чем отличаются эти брокеры сообщений и в каких случаях какой использовать.

Что такое RabbitMQ

RabbitMQ — это распределенный и горизонтально масштабируемый брокер сообщений. Он позволяет разным программам взаимодействовать с помощью протокола AMQP, а через дополнительные модули — и с помощью некоторых других протоколов: MQTT, HTTP и так далее.

Устройство брокера упрощенно можно описать так:

  • есть продюсер, или поставщик сообщений, отправляющий события;
  • очередь сообщений — своего рода «почтовый ящик», где хранятся сообщения;
  • подписчики, то есть программы — получатели сообщений.

В очереди может храниться любое количество сообщений от неограниченного количества поставщиков, а получать их может неограниченное число подписчиков.

RabbitMQ принимает сообщения от поставщиков и отправляет им подтверждение о приеме, а затем перенаправляет их подписчикам. Получатели подтверждают, что сообщение доставлено, либо сигнализируют о неудаче. Во втором случае сообщение остается в очереди, пока не будет доставлено. А после доставки оно удалится из системы.

Основная фишка RabbitMQ — это гибкая маршрутизация сообщений между различными поставщиками и потребителями событий. Решение не ограничивается созданием простой очереди данных между двумя сторонами. В сервере реализована концепция принимающих события узлов (эксчейнджей) — они маршрутизируют данные в разные очереди сообщений RabbitMQ.

Например, одно и то же сообщение должны получить три подписчика. Оно попадет на узел, который отправит три одинаковых сообщения в три очереди для всех подписчиков, которым оно должно быть доставлено.

 RabbitMQ маршрутизирует данные в разные очереди сообщений. Источник www.youtube.com
RabbitMQ маршрутизирует данные в разные очереди сообщений. Источник www.youtube.com

Особенности RabbitMQ:

  • Механизм маршрутизации дополняют ключи маршрутизации (Routing Keys). Они позволяют создавать гибкие правила пересылки сообщений между источниками и потребителями. Благодаря этому RabbitMQ подходит для широкого спектра задач по реализации нетривиальных бизнес-процессов в коде.
  • Обширные инструменты маршрутизации позволяют разработчикам и администраторам настраивать сложные системы с тысячами источников и приемников сообщений. Решение подходит для систем бронирования билетов, логистических программ и микросервисных приложений .
  • RabbitMQ реализует концепцию push-доставки: поставщик может направить новые события в сеть, но получатель не может их запросить у поставщика. При этом система не гарантирует порядок доставки сообщений.

Apache Kafka — другой подход к очередям сообщений

Apache Kafka — это тоже распределенный брокер сообщений, но работает он по другому принципу. Он реализует архитектурную концепцию распределенного лога, в который заносят информацию разные поставщики данных. Затем информацию из этого лога читают другие программы и микросервисы.

Сообщения сохраняются в брокере, подписчики подписываются на них, при этом гарантируется, что сообщения находятся в той же последовательности, в которой поступили.

Kafka не отслеживает, получил ли подписчик сообщение, он просто хранит его в течение установленного времени. Подписчики сами отправляют запросы к брокеру о новых сообщениях и указывают, что им нужно прочитать. Сообщения после прочтения не удаляются, поэтому есть возможность повторного их получения.

 Apache Kafka реализует концепцию распределенного лога. Источник kafka.apache.org
Apache Kafka реализует концепцию распределенного лога. Источник kafka.apache.org

Особенности Apache Kafka:

  • Apache Kafka славится способностью поглощать и пересылать титанические объемы данных. В нем есть все, что нужно для работы с высокими нагрузками: репликация, горизонтальное масштабирование, параллельная обработка потоков сообщений сразу на нескольких серверах.
  • Параллелизм и распределенная архитектура хорошо сказываются на надежности: даже выход из строя части кластера не нарушит доставку сообщений.
  • В пересылке данных принимают участие поставщики и потребители данных. Поставщики пишут сообщения в Apache Kafka, потребители их читают. Для организации систем со сложной топологией применяют темы — своего рода разделы для категоризации различных сообщений по назначению.
  • Для маршрутизации сообщений могут применяться Routing Keys, похожие на те, что используются в RabbitMQ. Но, в отличие от RabbitMQ, Apache Kafka гарантирует порядок доставки сообщений.

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

RabbitMQ

  • Вам важна гибкость в маршрутизации сообщений внутри системы. Инструментарий для построения путей доставки данных в RabbitMQ способен решить даже самые хитрые сценарии в организации потоков событий.
  • Вам важен сам факт доставки сообщений, но порядок доставки не принципиален. Настройки RabbitMQ его не гарантируют: если вы сначала отправили сообщение №1, а затем сообщение №2, то подписчику они могут прийти в обратном порядке.

Apache Kafka

  • Apache Kafka однозначно подходит, если вы работаете с big data . Репликация и параллельная обработка теоретически могут масштабировать вашу систему до бесконечности. Плюс Kafka выигрывает по производительности: может достичь пропускной способности в миллионы сообщений в секунду даже при ограниченных ресурсах.
  • Решение позволяет программистам извлекать из очереди сообщения (Message Queuing) за любой момент времени.
  • В некоторых системах порядок совершения событий имеет критическое значение — например, груз не может быть доставлен до того, как был отправлен. В таких системах необходимо использовать Apache Kafka: он гарантирует порядок доставки сообщений.

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

Apache Kafka подойдет, если работаете с большими нагрузками, вам важна масштабируемость, доставка сообщений в правильном порядке и возможность просматривать историю сообщений.

Источник: https://mcs.mail.ru/blog/rabbitmq-ili-apache-kafka

Читайте также статьи по теме:
Apache Kafka: что это и как работает
Как спокойно спать, когда у вас облачный сервис: основные архитектурные советы
Как реализуется отказоустойчивая веб-архитектура в платформе Mail.ru Cloud Solutions