rocketmq部署及配置介绍

本文详细介绍了RocketMQ的部署过程,包括硬件和软件环境要求,单机和集群安装步骤,以及Broker目录和日志目录的说明。此外,还阐述了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消息的存储是由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的文件结构如下图:

  • 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部署方法和流程 #### 一、环境准备 为了成功部署 RocketMQ,需先准备好运行所需的软硬件环境。通常情况下,操作系统建议选用 Linux 发行版,如 CentOS 或 Ubuntu;JDK 版本应不低于 JDK8。 #### 二、下载并解压安装包 可以从官方 GitHub 页面获取最新的稳定版本压缩文件,将其上传至服务器并通过命令行工具进行解压操作。 ```bash tar -zxvf rocketmq-all-x.x.xx-bin-release.zip -C /opt/rocketmq ``` #### 三、启动 NameServer 组件 NameServer 是整个消息系统的命名服务节点,在集群模式下可以配置多个实例以提高可用性和负载均衡能力。通过执行以下脚本来开启此组件: ```bash nohup sh bin/mqnamesrv & ``` 确认 NameServer 正常工作后会看到提示信息 `The Name Server boot success.`[^4] #### 四、启动 Broker 组件 Broker 负责实际的消息存储转发功能,同样支持多副本架构增强可靠性。创建 broker.conf 文件定义必要的参数设置之后再利用下面指令激活它: ```bash nohup sh bin/mqbroker -n localhost:9876 autoCreateTopicEnable=true & ``` 这里 `-n` 参数指定了之前已经启动好的 nameserver 地址列表,而 `autoCreateTopicEnable=true` 表示允许自动创建不存在的主题名称。 #### 五、验证集群状态 当上述两部分都顺利上线以后就可以借助自带工具检查整体健康状况了: ```bash sh tools.sh org.apache.rocketmq.tools.admin.TopicList -n localhost:9876 ``` --- ### 最佳实践要点 - **分离部署 Nameserver 和 Broker** 确保这两个角色分别位于不同的物理机上或者容器内,从而减少相互干扰的可能性,并且便于后续扩展维护管理。 - **合理规划 Topic 数量及分区数目** 依据业务场景预估未来可能产生的数据规模,提前分配足够的主题数量以及对应的队列长度,避免后期频繁调整带来额外开销。 - **优化消费者处理逻辑** 针对可能出现的大批量未读取消息情况制定预案措施,比如采用并发线程池加速拉取速度,或是引入幂等机制防止重复投递造成混乱等问题发生。 - **监控报警体系构建** 建立完善的日志记录规则加上实时告警通知渠道,及时捕捉异常波动现象以便快速响应解决问题。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值