Перейти к основному содержимому

Поиск по CooLWJ

选择搜索范围,输入关键词后按回车。

Язык

Золотое трио очередей сообщений: всестороннее сравнение RabbitMQ、RocketMQ и Kafka — что выбрать?

1、Сценарии применения

1.RabbitMQ:

Подходит для сценариев с высокими требованиями к удобству использования и гибкости

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

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

  • Архитектура,управляемая событиями:модель публикации и подписки RabbitMQ позволяет строить архитектуру,управляемую событиями,публикуя события системы как сообщения в соответствующих темах。Разные потребители могут подписываться на интересующие их темы и выполнять соответствующую обработку。

2.RocketMQ:

Подходит для обработки больших объёмов данных и сценариев с высокой пропускной способностью

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

  • Обработка журналов в реальном времени:благодаря высокой пропускной способности и низкой задержке RocketMQ можно использовать для обработки журналов в реальном времени, например для сбора и анализа журналов, их агрегации и подобных задач。

  • Потоковая обработка:RocketMQ поддерживает режим потоковой обработки: создаваемые потоки данных можно передавать через очередь сообщений платформам потоковой обработки(например, Flink и Spark Streaming), обеспечивая обработку и анализ данных в реальном времени.

3.Kafka:

Подходит для обработки потоков данных в реальном времени и других сценариев потоковой обработки с высокой пропускной способностью

  • Конвейеры данных и обработка данных в реальном времени:высокая пропускная способность Kafka и возможность долговременного хранения делают её идеальным выбором для создания надёжных конвейеров данных и систем обработки данных в реальном времени, используемых для сбора, передачи и обработки потоковых данных.

  • Обработка журналов и потоков событий:разделение на разделы и гарантии порядка в Kafka делают её идеальным решением для обработки журналов и потоков событий, например сбора журналов приложений, восстановления состояния по событиям и мониторинга бизнес-процессов.

  • Анализ потоков в реальном времени и машинное обучение: Kafka в сочетании с фреймворками потоковой обработки, такими как Flink и Spark Streaming, поддерживает задачи анализа потоков и машинного обучения, обрабатывая потоки данных в реальном времени для оперативного получения выводов и поддержки принятия решений.

2、Архитектура сервиса

  • RabbitMQ

  1. Channel(канал):Channel — это виртуальное соединение между RabbitMQ и приложением. Создавая несколько каналов в рамках одного физического соединения(connection), приложение может выполнять операции обмена сообщениями параллельно. Канал отвечает за отправку и получение сообщений, а также за связанные с ними операции, например объявление очередей, определение обменников и привязок. Канал можно рассматривать как легковесный сеанс взаимодействия с RabbitMQ через одно физическое соединение.

  2. Exchange(обменник): обменник — центр приёма и пересылки сообщений. Когда сообщение отправляется в RabbitMQ, оно маршрутизируется через обменник. В зависимости от своего типа и правил привязки обменник направляет сообщение в одну или несколько очередей. К распространённым типам относятся обменники прямой маршрутизации(direct), тематические(topic), широковещательные(fanout)и маршрутизирующие по заголовкам(headers).

  3. Queue(очередь):Очередь — это буфер, используемый RabbitMQ для хранения сообщений. Если сообщение нельзя сразу направить потребителю, оно сохраняется в очереди, ожидая, пока потребитель получит и обработает его. У каждой очереди есть уникальное имя, а доставка и потребление сообщений происходят в порядке FIFO(первым пришёл — первым вышел).

  4. Virtual Host(виртуальный хост):виртуальный хост — это логически изолированная среда, позволяющая разделить сервер RabbitMQ на несколько независимых частей. У каждого виртуального хоста есть собственные обменники, очереди, привязки и настройки прав доступа. Виртуальные хосты помогают изолировать разные приложения или службы и обеспечивают контроль безопасности и управления ресурсами.

  5. Broker(посредник):Broker — экземпляр сервера очередей сообщений RabbitMQ, отвечающий за приём, хранение и маршрутизацию сообщений. Он выступает посредником, передавая сообщения от производителей потребителям. Один экземпляр RabbitMQ может содержать несколько Broker, каждый из которых может обслуживать несколько виртуальных хостов и очередей.

  • RocketMQ

  1. NameServer(сервер имён):NameServer — компонент службы имён RocketMQ, управляющий маршрутной информацией Broker и предоставляющий её. Он служит центром метаданных и поддерживает регистрационные сведения Broker, маршруты Topic и другие данные. Перед отправкой и получением сообщений Producer и Consumer должны обратиться к NameServer, чтобы получить правильную информацию о Broker.

  2. Controller(контроллер):Controller — компонент управления RocketMQ, отвечающий за координацию и управление работой всего кластера RocketMQ. Он отслеживает изменения состояния Broker, обрабатывает расширение и сокращение кластера, выполняет балансировку нагрузки и другие операции. Controller — один из ключевых компонентов кластера RocketMQ, обеспечивающий его надёжную работу и автоматизированное управление.

  3. Broker(брокер):Broker — узел хранения и обработки сообщений RocketMQ. Он принимает сообщения от Producer и сохраняет их на диске. Broker также обрабатывает запросы Consumer на получение сообщений и передаёт сообщения Consumer для обработки. Кластер RocketMQ может содержать несколько Broker, каждый из которых отвечает за хранение части данных сообщений топиков.

  • KafkaMQ

  1. Broker(брокер):Broker — это узел кластера Kafka, отвечающий за хранение и обработку сообщений. Каждый Broker представляет собой отдельный экземпляр сервера Kafka. Он может работать на отдельном физическом сервере, виртуальной машине или в контейнере. Кластер Kafka может включать несколько брокеров, которые совместно обеспечивают высокую доступность и высокую пропускную способность передачи сообщений.

  2. Topic(тема):Topic — логическая категория или тема сообщений. Это единица публикации сообщений и подписки на них. Producer публикует сообщения в указанном Topic, а Consumer подписывается на интересующие Topic, чтобы получать сообщения. Topic можно рассматривать как контейнер сообщений, предназначенный для классификации и группировки связанных сообщений。

  3. 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、Модели обмена сообщениями

Основные модели передачи данных в распространённых системах обмена сообщениями — модель «точка — точка» и модель публикации и подписки. Подробнее:

  1. RabbitMQ:

  • Модель публикации и подписки: RabbitMQ поддерживает модель публикации и подписки, в которой производитель публикует сообщения в обменник (Exchange), а тот передаёт их нескольким связанным с ним посредством привязок (Binding) очередям. Потребители могут независимо получать сообщения из очередей.

  • Модель «точка — точка»:RabbitMQ также поддерживает модель «точка — точка», в которой производитель отправляет сообщения в определённую очередь, а потребитель получает их из этой очереди. Каждое сообщение может быть получено и обработано только одним потребителем.

2.RocketMQ:

  • Модель «публикация — подписка»:RocketMQ поддерживает модель «публикация — подписка», в которой производитель отправляет сообщения в определённую тему(Topic), а потребители подписываются на интересующие их темы. В RocketMQ поддерживаются разные режимы подписки, например широковещательный и кластерный, что позволяет реализовать многоадресную доставку сообщений или их потребление с балансировкой нагрузки.

  • Режим очереди: RocketMQ также поддерживает режим очереди, в котором производитель отправляет сообщения в указанную очередь, а потребитель получает сообщения из указанной очереди. Несколько потребителей могут параллельно получать сообщения из одной очереди.

3.Kafka:

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

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

Комментарии

Отправка

Выберите оформление

Выбранное оформление применяется ко всему сайту.