1、Сценарии применения
1.RabbitMQ:
Подходит для сценариев с высокими требованиями к удобству использования и гибкости
Обработка асинхронных задач:RabbitMQ предоставляет надёжный механизм передачи сообщений, подходящий для обработки асинхронных задач. Например, длительные задачи можно помещать в очередь сообщений, а затем асинхронно обрабатывать потребителями, повышая скорость отклика и масштабируемость системы.
Разделение компонентов системы: благодаря использованию RabbitMQ в качестве промежуточного ПО для обмена сообщениями различные компоненты системы могут взаимодействовать через сообщения, образуя слабо связанную архитектуру, что повышает удобство сопровождения и гибкость системы.
Архитектура,управляемая событиями:модель публикации и подписки RabbitMQ позволяет строить архитектуру,управляемую событиями,публикуя события системы как сообщения в соответствующих темах。Разные потребители могут подписываться на интересующие их темы и выполнять соответствующую обработку。
2.RocketMQ:
Подходит для обработки больших объёмов данных и сценариев с высокой пропускной способностью
Распределённые транзакции: RocketMQ поддерживает транзакционные сообщения для распределённых транзакций, затрагивающих несколько бизнес-систем, обеспечивая согласованность и надёжность сообщений, а также высокую пропускную способность при их передаче.
Обработка журналов в реальном времени:благодаря высокой пропускной способности и низкой задержке RocketMQ можно использовать для обработки журналов в реальном времени, например для сбора и анализа журналов, их агрегации и подобных задач。
Потоковая обработка:RocketMQ поддерживает режим потоковой обработки: создаваемые потоки данных можно передавать через очередь сообщений платформам потоковой обработки(например, Flink и Spark Streaming), обеспечивая обработку и анализ данных в реальном времени.
3.Kafka:
Подходит для обработки потоков данных в реальном времени и других сценариев потоковой обработки с высокой пропускной способностью
Конвейеры данных и обработка данных в реальном времени:высокая пропускная способность Kafka и возможность долговременного хранения делают её идеальным выбором для создания надёжных конвейеров данных и систем обработки данных в реальном времени, используемых для сбора, передачи и обработки потоковых данных.
Обработка журналов и потоков событий:разделение на разделы и гарантии порядка в Kafka делают её идеальным решением для обработки журналов и потоков событий, например сбора журналов приложений, восстановления состояния по событиям и мониторинга бизнес-процессов.
Анализ потоков в реальном времени и машинное обучение: Kafka в сочетании с фреймворками потоковой обработки, такими как Flink и Spark Streaming, поддерживает задачи анализа потоков и машинного обучения, обрабатывая потоки данных в реальном времени для оперативного получения выводов и поддержки принятия решений.
2、Архитектура сервиса
RabbitMQ
Channel(канал):Channel — это виртуальное соединение между RabbitMQ и приложением. Создавая несколько каналов в рамках одного физического соединения(connection), приложение может выполнять операции обмена сообщениями параллельно. Канал отвечает за отправку и получение сообщений, а также за связанные с ними операции, например объявление очередей, определение обменников и привязок. Канал можно рассматривать как легковесный сеанс взаимодействия с RabbitMQ через одно физическое соединение.
Exchange(обменник): обменник — центр приёма и пересылки сообщений. Когда сообщение отправляется в RabbitMQ, оно маршрутизируется через обменник. В зависимости от своего типа и правил привязки обменник направляет сообщение в одну или несколько очередей. К распространённым типам относятся обменники прямой маршрутизации(direct), тематические(topic), широковещательные(fanout)и маршрутизирующие по заголовкам(headers).
Queue(очередь):Очередь — это буфер, используемый RabbitMQ для хранения сообщений. Если сообщение нельзя сразу направить потребителю, оно сохраняется в очереди, ожидая, пока потребитель получит и обработает его. У каждой очереди есть уникальное имя, а доставка и потребление сообщений происходят в порядке FIFO(первым пришёл — первым вышел).
Virtual Host(виртуальный хост):виртуальный хост — это логически изолированная среда, позволяющая разделить сервер RabbitMQ на несколько независимых частей. У каждого виртуального хоста есть собственные обменники, очереди, привязки и настройки прав доступа. Виртуальные хосты помогают изолировать разные приложения или службы и обеспечивают контроль безопасности и управления ресурсами.
Broker(посредник):Broker — экземпляр сервера очередей сообщений RabbitMQ, отвечающий за приём, хранение и маршрутизацию сообщений. Он выступает посредником, передавая сообщения от производителей потребителям. Один экземпляр RabbitMQ может содержать несколько Broker, каждый из которых может обслуживать несколько виртуальных хостов и очередей.
RocketMQ
NameServer(сервер имён):NameServer — компонент службы имён RocketMQ, управляющий маршрутной информацией Broker и предоставляющий её. Он служит центром метаданных и поддерживает регистрационные сведения Broker, маршруты Topic и другие данные. Перед отправкой и получением сообщений Producer и Consumer должны обратиться к NameServer, чтобы получить правильную информацию о Broker.
Controller(контроллер):Controller — компонент управления RocketMQ, отвечающий за координацию и управление работой всего кластера RocketMQ. Он отслеживает изменения состояния Broker, обрабатывает расширение и сокращение кластера, выполняет балансировку нагрузки и другие операции. Controller — один из ключевых компонентов кластера RocketMQ, обеспечивающий его надёжную работу и автоматизированное управление.
Broker(брокер):Broker — узел хранения и обработки сообщений RocketMQ. Он принимает сообщения от Producer и сохраняет их на диске. Broker также обрабатывает запросы Consumer на получение сообщений и передаёт сообщения Consumer для обработки. Кластер RocketMQ может содержать несколько Broker, каждый из которых отвечает за хранение части данных сообщений топиков.
KafkaMQ
Broker(брокер):Broker — это узел кластера Kafka, отвечающий за хранение и обработку сообщений. Каждый Broker представляет собой отдельный экземпляр сервера Kafka. Он может работать на отдельном физическом сервере, виртуальной машине или в контейнере. Кластер Kafka может включать несколько брокеров, которые совместно обеспечивают высокую доступность и высокую пропускную способность передачи сообщений.
Topic(тема):Topic — логическая категория или тема сообщений. Это единица публикации сообщений и подписки на них. Producer публикует сообщения в указанном Topic, а Consumer подписывается на интересующие Topic, чтобы получать сообщения. Topic можно рассматривать как контейнер сообщений, предназначенный для классификации и группировки связанных сообщений。
Partition(раздел):Topic можно разбить на один или несколько разделов, каждый из которых представляет собой подмножество Topic. Раздел — минимальная единица хранения и передачи сообщений. Физически каждому разделу соответствует отдельный файл журнала; эти файлы распределены по разным Broker. Разделы позволяют Kafka масштабироваться горизонтально и выполнять параллельную обработку, обеспечивая более высокую пропускную способность. Сообщения в каждом разделе хранятся и передаются в порядке поступления.
3、Персистентность и надёжность:
RabbitMQ: RabbitMQ использует механизм постоянного хранения сообщений, записывая их на диск для обеспечения надёжности. Поддерживает различные механизмы подтверждения сообщений и транзакции, позволяющие обеспечить надёжную доставку.
RocketMQ:RocketMQ обладает мощными средствами сохранения данных и обеспечения надёжности, поддерживает синхронную запись на диск и асинхронную репликацию, что позволяет обеспечивать высоконадёжную доставку сообщений。
Kafka:Kafka хранит сообщения долговременно, записывая их в файлы журналов на диске. Механизмы разделения на партиции и репликации обеспечивают высокую надёжность и долговременное хранение.
4、Пропускная способность
RabbitMQ:пропускная способность RabbitMQ обычно сравнительно невысока, поэтому он подходит для приложений малого и среднего масштаба. RabbitMQ подходит для приложений малого и среднего масштаба и обычно способен обрабатывать сообщения в объёмах от десятков до сотен тысяч. Основное внимание в нём уделяется надёжной доставке и сохранению сообщений на постоянном носителе;для высокой пропускной способности могут потребоваться оптимизация и настройка。
RocketMQ:RocketMQ обладает высокой пропускной способностью и может обрабатывать миллионы сообщений. Он отлично показывает себя в сценариях распределённых транзакций и масштабного обмена сообщениями.
Kafka:Kafka — система очередей сообщений, известная высокой пропускной способностью и способная обрабатывать миллионы сообщений и даже больше. Kafka подходит для задач с высокой пропускной способностью, таких как масштабная обработка данных, потоковая обработка в реальном времени и обработка журналов。
5、Время отклика
6、Сообщество и экосистема
RabbitMQ:RabbitMQ обладает богатой экосистемой плагинов и инструментов и поддержкой обширного сообщества разработчиков.
RocketMQ:RocketMQ широко используется в Китае и пользуется поддержкой обширной экосистемы Alibaba и сообщества.
Kafka:у Kafka активное сообщество разработчиков открытого ПО и обширная экосистема; её широко используют многие крупные компании.
Звёзды Github
Участники Github
В целом:rabbitmq<rocketmq<kafka
7、Принципы проектирования
RabbitMQ:RabbitMQ — связующее ПО для обмена сообщениями с открытым исходным кодом на основе AMQP(расширенного протокола очередей сообщений). Оно ориентировано на простоту использования и гибкость, поддерживает различные модели обмена сообщениями и надёжную доставку.
RocketMQ:RocketMQ — распределённое связующее ПО для обмена сообщениями с открытым исходным кодом от Alibaba. Изначально оно разрабатывалось для внутренних потребностей Alibaba в обработке огромных объёмов данных и отличается высокой пропускной способностью и низкой задержкой. В 2016 году Alibaba передала RocketMQ фонду Apache Software Foundation.
Kafka:Kafka — это разработанная LinkedIn распределённая платформа потоковой обработки, предназначенная главным образом для обработки потоков данных в реальном времени с высокой пропускной способностью, с долговременным хранением и обработкой данных. В 2011 году Kafka стала проектом Apache с открытым исходным кодом.
8、Модель данных
RabbitMQ: RabbitMQ использует модель очереди (Queue): сообщения отправляются в очередь, а потребители получают их из очереди и обрабатывают.
RocketMQ: RocketMQ использует модель тем (Topic) и меток (Tag). Сообщения публикуются в темы, а потребители могут подписываться на сообщения и фильтровать их по темам и меткам.
Kafka:Kafka использует модель публикации и подписки,сообщения публикуются в топиках,несколько потребителей могут подписаться на один топик и независимо обрабатывать сообщения.
9、Инструмент веб-администрирования
RabbitMQ
Веб-интерфейс управления RabbitMQ:RabbitMQ поставляется с веб-интерфейсом управления, доступным через браузер. Он предоставляет наглядный пользовательский интерфейс для просмотра различных аспектов работы сервера RabbitMQ и управления ими, включая очереди, обменники, привязки, права пользователей и другое. По умолчанию веб-интерфейс управления работает на порту 15672.
RokcetMQ
RocketMQ Console:официально RocketMQ предоставляет веб-консоль под названием RocketMQ Console. Она предлагает визуальный интерфейс для управления различными аспектами кластера RocketMQ и их мониторинга, включая темы, группы потребителей, поиск сообщений, статистику производительности и прочее. Чтобы воспользоваться этим инструментом, откройте URL консоли.
Kafka
Kafka Manager:Kafka Manager — графический инструмент с открытым исходным кодом, разработанный Yahoo для управления кластерами Apache Kafka. Он позволяет отслеживать состояние кластеров в реальном времени, управлять топиками и разделами, группами потребителей и выполнять другие задачи.
10、Модели обмена сообщениями
Основные модели передачи данных в распространённых системах обмена сообщениями — модель «точка — точка» и модель публикации и подписки. Подробнее:
RabbitMQ:
Модель публикации и подписки: RabbitMQ поддерживает модель публикации и подписки, в которой производитель публикует сообщения в обменник (Exchange), а тот передаёт их нескольким связанным с ним посредством привязок (Binding) очередям. Потребители могут независимо получать сообщения из очередей.
Модель «точка — точка»:RabbitMQ также поддерживает модель «точка — точка», в которой производитель отправляет сообщения в определённую очередь, а потребитель получает их из этой очереди. Каждое сообщение может быть получено и обработано только одним потребителем.
2.RocketMQ:
Модель «публикация — подписка»:RocketMQ поддерживает модель «публикация — подписка», в которой производитель отправляет сообщения в определённую тему(Topic), а потребители подписываются на интересующие их темы. В RocketMQ поддерживаются разные режимы подписки, например широковещательный и кластерный, что позволяет реализовать многоадресную доставку сообщений или их потребление с балансировкой нагрузки.
Режим очереди: RocketMQ также поддерживает режим очереди, в котором производитель отправляет сообщения в указанную очередь, а потребитель получает сообщения из указанной очереди. Несколько потребителей могут параллельно получать сообщения из одной очереди.
3.Kafka:
Модель публикации и подписки: Kafka использует модель публикации и подписки, в которой производители публикуют сообщения в определённые темы (Topic), а потребители подписываются на интересующие их темы. Модель подписки Kafka поддерживает несколько групп потребителей, каждая из которых может независимо обрабатывать сообщения, обеспечивая высокую пропускную способность и горизонтальное масштабирование.
Модель разделов: Kafka делит топик на несколько разделов, каждому из которых физически соответствует отдельный файл журнала. Производители отправляют сообщения в указанный раздел, а потребители могут параллельно обрабатывать сообщения из разных разделов. Такая модель позволяет Kafka обеспечивать горизонтальное масштабирование и высокую пропускную способность.