Учебное пособие RocketMQ промежуточного программного обеспечения для распределенных сообщений ①

Java сервер Kafka RabbitMQ

Введение в ПО промежуточного слоя для обмена сообщениями

Очередь сообщений (Message Queue, сокращенно MQ). Как ключевой компонент для реализации масштабируемости и масштабируемости системы распределенных сообщений, промежуточное программное обеспечение сообщений имеет преимущества высокой пропускной способности и высокой доступности.

Сравнение общей очереди сообщений

Обычно используемые очереди сообщений: RocketMQ, kafka, ActiveMQ, RabbitMQ, ZeroMQ и т. д.
Большая разница между activemq rabbitmq и kafka и RocketMQ заключается в том, что первые два поддерживают только режим master-slave, а последние два — это системы распределенных сообщений, которые поддерживают распределенные.
Постоянное сравнение сообщений: zeroMq не поддерживает, поддерживаются и activeMq, и rabbitMq.

RocketMQ

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

Kafka

Kafka — это очередь сообщений без механизма повторной передачи. Он широко используется благодаря своей горизонтальной масштабируемости и высокой пропускной способности. В настоящее время все больше и больше систем распределенной обработки с открытым исходным кодом, таких как Cloudera, Apache Storm и Spark, поддерживают интеграцию с Kafka. Kafka не полностью соответствует спецификации jms, ориентируясь на пропускную способность, аналогичную udp и tcp. У Кафки большая пропускная способность, и она не гарантирует 100% данных, будут потери данных, и она не 100% доставляется. Таким образом, kafka подходит для больших потоков данных, таких как данные журнала, например данные, используемые для статистики.

ActiveMQ

ActiveMQ похож на ZemoMQ, его можно развернуть в режиме брокера и в режиме P2P. Подобно RabbitMQ, здесь легко реализовать расширенные сценарии с небольшими затратами.

RabbitMQ

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

ZeroMQ

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

Введение в RocketMQ

RocketMQ — это промежуточное ПО для распределенных сообщений модели очереди. RocketMQ был разработан на основе Metaq, а когда был выпущен Metaq3.0, он был переименован в RocketMQ. RocketMQ — это распределенная система обмена сообщениями с открытым исходным кодом, основанная на технологии распределенных кластеров с высокой доступностью, предоставляющая услуги публикации сообщений и подписки с низкой задержкой и высокой надежностью.

Основными компонентами RocketMQ являются:

Основные компоненты RocketMQ: NameServer, Broker (брокер), Producer (производитель сообщений), Consumer (потребитель сообщений)

NameServer

NameServer: сервер имен RocketMQ, примерно эквивалентный технологии jndi, услуги брокера обновлений и обнаружения. Узел практически без состояния, который можно развернуть в кластерах без какой-либо синхронизации информации между узлами.

Producer

Производитель: Производитель сообщения.

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

Consumer

Потребитель: потребитель сообщений.

Потребитель устанавливает постоянное соединение с одним из узлов (выбранным случайным образом) в кластере серверов имен, периодически получает информацию о маршрутизации темы от сервера имен, устанавливает постоянное соединение с главным и подчиненным, которые предоставляют службы темы, и регулярно отправляет тактовые импульсы на Мастер и Раб. Потребитель может подписаться на сообщения от Мастера или от Ведомого.Правила подписки определяются конфигурацией Брокера.

Broker

Брокер: роль ретранслятора сообщений, отвечающая за хранение и пересылку сообщений. Брокер делится на Master и Slave.

Master может соответствовать нескольким Slave, но Slave может соответствовать только одному Master. Соответствие между Master и Slave определяется указанием одного и того же BrokerName и разных BrokerId. BrokerId, равный 0, указывает на Master, а BrokerId, отличный от 0, указывает на Slave. Затем все брокеры устанавливают длительные соединения с узлами на сервере имен и регулярно регистрируют информацию о топике на всех серверах имен.

Broker-Master: хост-сервер сообщений брокера

Broker-Slave: подчиненный сервер сообщений брокера

这里写图片描述

Возможности хранилища RocketMQ

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

  1. Используйте метод mmap + write

Преимущества: даже при частых вызовах передача файлов небольшими блоками очень эффективна.

Недостатки: метод прямого доступа к памяти нельзя использовать должным образом, он будет потреблять больше ресурсов процессора, чем sendfile, контроль безопасности памяти сложен, и необходимо избегать проблемы сбоя JVM.

  1. Использовать метод sendfile

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

Недостатки: Эффективность небольших блочных файлов ниже, чем у режима mmap, и может передаваться только в режиме BIO, а NIO использовать нельзя.

RocketMQ выбрал первый метод, метод mmap+write, потому что есть необходимость в передаче данных небольшими блоками, эффект будет лучше, чем sendfile.

Конфигурация кластера RocketMQ

Конфигурация кластера RocketMQ
这里写图片描述

Приложение: Учебник по установке

Woohoo. Linux IDC.com/Linux/2016-…

【Установка JDK】

Поскольку RocketMQ разработан на основе Java, нам необходимо установить JDK перед установкой RocketMQ, поскольку сервер обычно использует Linux, поэтому в этом блоге представлены только учебные пособия, основанные на системе Linux.

1. Создайте каталог java в каталоге /usr/

mkdir /usr/java

Войдите в каталог Java

cd /usr/java

2. Загрузите jdk в каталог /usr/java, а затем распакуйте его с помощью tar (вы можете использовать xftp для локальной загрузки jdk или использовать команду curl -O url для загрузки)

tar -zxvf jdk-8u102-linux-x64.tar.gz

3. Установите переменные среды

viПравить

vi /etc/profile

Добавьте следующую конфигурацию в файл профиля, как нажать esc для выхода, :wq!

JAVA_HOME=/usr/java/jdk1.8.0_102
JRE_HOME=/usr/java/jdk1.8.0_102/jre
CLASS_PATH=.: J AVA H OM E/ li b/ d t.j ar: JAVA_HOME/lib/tools.jar: J RE H OM E/ li bP AT H= PATH: J AV A H OM E/ bin : JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

Сделать изменения вступившими в силу

source /etc/profile

Проверить действительность jdk

java -version Если в системе установлен yum, вы можете напрямую использовать yum install java-1.7.0-openjdk для загрузки jdk

Установите переменные среды, остальные операции такие же, как указано выше.

JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.75.x86_64
JRE_HOME= J AVA H OM E/ jr eC LAS S P AT H= .: JAVA_HOME/lib/dt.jar: J AV A H OM E/ li b/ to ols. jar: JRE_HOME/lib
PATH= P AT H: JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

[Установка RocketMQ]

Woohoo. Linux IDC.com/Linux/2015-…

Разархивируйте и скопируйте в каталог /usr/local

tar zxf alibaba-rocketmq-3.2.2.tar.gz -C /usr/local/

Войдите в каталог /usr/local

cd /usr/local/

Чтобы установить синхронную связь, используйте команду ln

ln -s /usr/local/alibaba-rocketmq /usr/local/rocketmq

Перейти к синхронизируемой папке

cd rocketmq/

vim редактировать файл конфигурации

vim conf/2m-noslave/broker-a.properties
Эталонный файл конфигурации
brokerClusterName=FusionCluster
brokerName=broker-a
brokerId=0
namesrvAddr=dbTest249:9876;webTest251:9876
deleteWhen=04
fileReservedTime=120
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH
sstorePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog

Редактировать блок памяти JAVA

vim bin/runbroker.sh JAVA_OPT_1="-сервер -Xms512m -Xmx1g -XX:PermSize=128m -XX:MaxPermSize=320m"

Создать каталог данных

mkdir -p /data/rocketmq/store/commitlog
mkdir /data/logs
cd conf/
sed -i 's#{user.home}#/data#g' *.xml // Заменить {user.home} во всех файлах xml в каталоге conf на /data, введите r

Запустить RocketMQ

cd ../bin/
nohup sh mqnamesrv >/var/log/ns.log 2>&1 &
nohup sh mqbroker -c ../conf/2m-noslave/broker-a.properties > /var/log/mq.log 2>&1 &

Посмотреть журнал запуска

tail -f /var/log/ns.log tail -f /var/log/mq.log

Просмотр порта запуска

netstat -tunpl jps

Закрыть RocketMQ

sh mqshutdown
sh mqshutdown broker
sh mqshutdown namesrv

начать снова

nohup sh mqnamesrv >/var/log/ns.log 2>&1 & nohup sh mqbroker -c ../conf/2m-noslave/broker-a.properties > /var/log/mq.log 2>&1 &