rocketmq部署及配置介绍

1. 概述

1.1  编写目的

本文介绍了RocketMq的部署步骤、运行步骤以及Afa中RocketMq接入接出的配置说明以及组件使用说明,主要应用于使用RocketMq进行消息发送以及消费的场景。

 

1.2 名词解释

术语和缩写

解释

备注

nameServer

专门为RocketMQ设计的轻量级名称服务

 

producer

消息生产者,负责生产消息,一般由业务系统负责生产休息

 

Consumer

消息消费者,负责消费消息,一般是后台系统负责异步消息

 

Broker

消息中转角色,负责存储消息,转发消息

 

Master

Broker中的主节点

 

Slave

Broker中的副节点

 

异步复制

消息写入master节点,再由master节点异步复制到slave节点

 

同步双写

消息同时写入master节点和slave节点

 

异步刷盘

Broker的一种持久化策略,消息写入pagecache后,直接返回。由异步线程直接将pagecache写入硬盘

 

同步刷盘

Broker的一种持久化策略,消息写入pagecache后,由同步线程将pagecache写入硬盘后在返回。

 

Tps

每秒发送消息个数

 

 

1.3 参考资料

 

参考文件

备注

 

 

 

 

 

 

 

 

 

 

2 安装部署

 

2.1 硬件环境

Cpu8核、内存12g、硬盘1t

 

2.2 软件环境

1.    linux系统

2.    jdk1.8或以上版本 64位

3.    Maven 3.x

 

2.3 安装部署

2.3.1 单机部署

1、 查看JAVA环境

(1)   输入命令 java  -version 

(2)   显示Jdk版本

Java(TM) SE Runtime Environment (build 1.8.0_111-b14)

Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)

(3)   如果jdk版本不低于1.8则继续下一步,如果低于1.8则需要安装jdk1.8或以上版本

 

2、 下载rocketmq

可通过命令wget http://mirrors.hust.edu.cn/apache/rocketmq/4.2.0/rocketmq-all-4.2.0-bin-release.zip下载

 

3、 解压rocketmq

输入命令 unzip rocketmq-all-4.2.0-bin-release.zip -d ./rocketmq

可将rocketmq解压到当前目录的rocketmq文件夹内

4、 创建存储路径

依次输入命令

 

mkdir -p /usr/local/rocketmq/store

mkdir -p /usr/local/rocketmq/store/commitlog

mkdir -p /usr/local/rocketmq/store/consumequeue

mkdir -p /usr/local/rocketmq/store/index

 

5、 配置RocketMq环境变量

RockeMq一般部署于非root用户下,vi /home/${user}/.bash_profile,添加如下内容:

 

export ROCKETMQ_HOME=~/rocketmq

export NAMESRV_ADDR=0.0.0.0:9876

 

6、 设置broker配置

(1)输入命令创建配置

vi rocketmq/conf/default-broker.properties

(2)输入内容:

namesrvAddr=ip:port;

messageIndexSafe=true

autoCreateTopicEnable=true

waitTimeMillsInSendQueue=5000

sendMessageThreadPoolNums=64

useReentrantLockWhenPutMessage=true

defaultReadQueueNums = 16

defaultWriteQueueNums = 16

brokerIP1=ip

brokerClusterName=clusterName

brokerName=brokerName

brokerId=0

deleteWhen=04

fileReservedTime=48

brokerRole=ASYNC_MASTER

flushDiskType=ASYNC_FLUSH

listenPort=port

storePathRootDir=/usr/local/rocketmq/store

storePathCommitLog= /usr/local/rocketmq/store/commitlog

storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue

storePathIndex=/usr/local/rocketmq/store/index

 

注意:storePathRootDir、storePathCommitLog、storePathConsumeQueue、storePathIndex这4个路径的设置要与第4步创建的存储路径一致。

 

以上内容中部分值需要根据实际情况修改,详情如下:

参数

原始值

修改值说明

namesrvAddr

ip:port

ip设置实际ip,port可自由设置,一般设置9876

brokerIP1

ip

ip设置外网ip,不需要连接外网的话,可以在参数前面加#注释掉

listenPort

port

port可自由设置,一般设置10911

brokerName

本机主机名

Broker名称

brokerClusterName

DefaultCluster

Broker 所属哪个集群

brokerId

 

 

0

BrokerId,必须是大等于 0 的整数,0 表示Master,>0 表示 Slave,一个 Master 可以挂多个 Slave,Master 与 Slave

通过 BrokerName 来配对

brokerPermission

0x4|0x2

broker读写权限

defaultTopicQueueNums

8

默认topic读写队列数

 

autoCreateTopicEnable

 

TRUE

是否允许Broker 自动创建

Topic,建议线下开启,线上关闭

clusterTopicEnable

true

是否启用集群topic

brokerTopicEnable

true

是否启用brokertopic

 

autoCreateSubscriptionGroup

 

TRUE

是否允许Broker 自动创建订阅组,建议线下开启,线上关

sendMessageThreadPoolNums

1

发送消息线程池数量

storePathConsumeQueue

$HOME/store/consumequeue

消费队列存储路径

storePathIndex

$HOME/store/index

消息索引存储路径

storeCheckpoint

$HOME/store/checkpoint

checkpoint 文件存储路径

abortFile

$HOME/store/abort

abort 文件存储路径

fileReservedTime

48

文件保留时间,默认 48 小时

 

 

brokerRole

 

 

ASYNC_MASTER

Broker 的角色

-异步复制

Master: ASYNC_MASTER

Slave: SLAVE

-同步双写

Master: SYNC_MASTER

Slave: SLAVE

 

flushDiskType

 

ASYNC_FLUSH

刷盘方式

  • ASYNC_FLUSH 异步刷盘

-SYNC_FLUSH 同步刷盘

deleteWhen

04

删除文件时间点,默认凌晨 4

defaultReadQueueNums

16

创建Topic中默认的读队列数量

defaultWriteQueueNums

16

创建Topic中默认的写队列数量

(3)最后按esc键,输入:wq保存配置

 

7、 修改启动脚本参数

vi bin/runbroker.sh

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"

 

vi bin/runserver.sh 

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:PermSize=128m -XX:MaxPermSize=320m"

注意:XmsXmx至少是1G  否则启动不起来  Xmn一般是前者的一半,这边设置的内存不能大于机器实际的内存,根据实际情况调整。

8、 启动NameSrv

nohup sh bin/mqnamesrv &

9、  启动broker

nohup sh mqbroker -c conf/default-broker.properties &

10、 停止broker

  其中default-broker.properties为上面第5步设置的broker配置文件名

sh mqshutdown broker

11、 停止namesrv

sh mqshutdown namesrv

12、验证

(1)启动namesrv和broker

nohup sh bin/mqnamesrv &

nohup sh mqbroker -c conf/default-broker.properties &

(2)在ROCKETMQ_HOME路径下执行以下命令模拟Producer发消息:

sh tools.sh org.apache.rocketmq.example.quickstart.Producer

(3)观察结果:会发出很多条下面的命令,说明发送成功:

(4)在ROCKETMQ_HOME路径下执行以下命令模拟Consumer发消息:

sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

(5)观察结果:会收到和上面一样多的命令,说明接收成功,可证明RocketMQ部署成功:

 

2.3.2 集群安装

 

1、 根据单实例安装步骤成功安装多个rocketmq

2、Broker的集群部署分为多Master模式、多Master多Slave模式异步复制、多Master多Slave模式同步双写

2.1多Master模式

(1)修改配置 namesrvAddr=ip1:port1;ip2:port2 多个地址之间用分号;隔开

(2)修改配置brokerClusterName=clusterName集群名字设置统一

(3)修改配置brokerName为不同名称

2.2 多Master多Slave模式异步复制(其余配置与多Master模式一致)

       一个Master对应一个Slave,Master与Slave的配置不同项为:

       Master:brokerRole= ASYNC_MASTER

       Slave:brokerRole= SLAVE

2.3 多Master多Slave模式同步双写(其余配置与多Master模式一致)

       一个Master对应一个Slave,Master与Slave的配置不同项为:

       Master:brokerRole= SYNC_MASTER

       Slave:brokerRole= SLAVE

3、 验证

(1) 启动所有rocketmq实例的namesrv和broker

(2) 在ROCKETMQ_HOME路径下执行以下查看集群信息:

sh mqadmin clusterList -n namesrvAddr

以上命令中namesrvAddr需要修改为实际的地址

(3) 观察结果:执行后会显示如下格式的信息

图片中可看出集群下的所有rocketmq单实例

 

3 目录说明

3.1 Broker目录说明store

store的文件结构如下图:

rocketmq部署及配置介绍_第1张图片

  • Rocketmq消息的存储是由ConsumeQueue和CommitLog配合完成的,消息真正的物理存储文件是CommitLog,ConsumeQueue是消息的逻辑队列,类似数据库的索引文件,存储的是指向物理存储的地址。每个topic下的每个Message Queue都有一个对应的ConsumeQueue文件。
  • CommitLog以物理文件的形式存放,每台Broker上的CommitLog被本机器所有ConsumeQueue共享。
  • config文件夹下的topics.json存储每个topic的读写队列数、权限、是否顺序等信息; consumerFilter.json存储消息的过滤的相关信息;consumerOffset.json存储每个消费者Consumer在每个topic上对于该topic的consumequeue队列的消费进度;delayOffset.json存储对于延迟主题SCHEDULE_TOPIC_XXXX的每个consumequeue队列的消费进度;subscriptionGroup.json存储每个消费者Consumer的订阅信息。
  • Index文件夹存放的是索引文件,用于加快消息查询的速度。

 

3.2 logs目录说明

RocketMq的文件存放于${user.home}/logs/rocketmqlogs,logs的文件结构如下图:

rocketmq部署及配置介绍_第2张图片

  • Namesrv.log记录着namesrv的运行日志
  • Broker.log记录这broker的运行日志
  • Store.log记录着消息存储相关的日志
  • Remoting.log记录着连接远程机器相关的日志

 

4 基本功能

4.1生产者(P端)

其中可投递消息类型分为三种:无序消息(同步、异步发送)、有序消息(仅同步发送)。其中无序消息又分为普通消息、延时消息。

4.1.1 普通消息

 无具体定制消息格式,最为普通的一种消息。

 

4.1.2 延时消息

  P端发送消息时,指定消息延时发送的级别,级别为1-18级(默认为0级,即不延时发送),对应的时间为1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h 。

 

4.1.3 有序消息

 P端发送消息时,只往Topic中选定的一条队列发送消息,这样就可以保证消息有序的投递以及消费

 

注意:Rocketmq可以严格的保证消息有序,但是要保证全局顺序消息,只能消除所有的并发处理,各部分都设置成单线程处理,这时高并发、高吞吐量的功能就用不上了;但是在保证部分消息有序的情况下,同一个consumer queue的消息有序消费,不同的Consumer queue的消息可以并发处理,可以兼顾消息有序并且实现高并发高吞吐量的效果。

 

4.2消费者(C端)

必须创建Topic后,才启动C端监听Topic,其中C端的订阅模式分为集群订阅和广播订阅模式。

 

4.2.1 集群订阅

同一个 ConsumerGroup 所标识的所有 Consumer 平均分摊消费消息。例如某个 Topic 有 9 条消息,一个 ConsumerGroup 有 3 个 Consumer 实例,那么在集群消费模式下每个实例平均分摊,只消费其中的 3 条消息。

 

4.2.2 广播订阅

同一个 ConsumerGroup 所标识的所有 Consumer 都会各自消费某条消息一次。例如某个 Topic 有 9 条消息,一个 ConsumerGroup 有 3 个 Consumer 实例,那么在广播消费模式下每个实例都会各自消费 9 条消息。

 注意

(1)在广播消费模式下,无法设置消息堆积报警,也无法进行消息堆积查询。因此,您也可以创建多个 ConsumerGroup 来达到广播模式的效果。

 (2)顺序消费不支持广播订阅。

 

4.2.3 注意事项

   (1) 订阅关系一致性。同一个ConsumerGroup下订阅的 Topic 必须一致、订阅的 Topic 中的 Tag 必须一致。

 

你可能感兴趣的:(rocketmq部署及配置介绍)