Меню

RabbitMQ или Apache Kafka?

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

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

 

Что такое RabbitMQ?

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

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

• Есть продюсер, или поставщик сообщений, отправляющий события.

• Очередь сообщений – своего рода «почтовый ящик», где хранятся сообщения.

• Подписчики, то есть программы – получатели сообщений.

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

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

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

RabbitMQ

 

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

• Механизм маршрутизации дополняют ключи маршрутизации (Routing keys). Они позволяют создавать гибкие правила пересылки сообщений между источниками и потребителями.

• Обширные инструменты маршрутизации позволяют разработчикам и администраторам настраивать сложные системы с тысячами источников и приемников сообщений.

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

 

Что такое Apache Kafka?

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

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

Apache Kafkanın xüsusiyyətləri

 

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

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

• Параллелизм и распределенная архитектура хорошо сказываются на надежности: даже выход из строя части кластера не нарушит сообщения.

• В пересылке данных принимают участие поставщики и потребители данных. Поставщики пишут сообщения в Apache Kafka, потребители их читают.

• Apache Kafka, в отличие от RabbitMQ, гарантирует порядок доставки сообщений.

 

RabbitMQ vs Apache Kafka. Что выбрать?

RabbitMQ

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

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

Apache Kafka

• Apache Kafka однозначно подходит если выработаете с big data. Kafka выигрывает по производительности: может достичь пропускной способности в миллионы сообщений в секунду даже при ограниченных ресурсах.

• Решение позволяет программистам извлекать из очереди сообщения за любой момент времени.

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

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