15 Centos单机搭建Rocketmq运行环境

Source

先把rocketmq上传到/hom/data/目录下;

为了方便,我们统一用finalshell工具上传;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Df1mPkg-1631928711291)(C:\Users\java1234\Desktop\RocketMQ\课件\RocketMQ分布式消息队列课件.assets\image-20210903100841965.png)]
/home/下面再新建一个mq目录用来存放rocketmq安装文件;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7TB4pxC4-1631928711294)(C:\Users\java1234\Desktop\RocketMQ\课件\RocketMQ分布式消息队列课件.assets\image-20210903101315742.png)]
进入data目录,解压rocketmq压缩包到mq目录

unzip rocketmq-all-4.9.0-bin-release.zip -d ../mq

假如unzip没安装,可以安装下

yum install -y unzip zip

为了操作方便我们把解压后的文件名改成rocketmq,工具里右击重命名即可;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xxpYjI2j-1631928711295)(C:\Users\java1234\Desktop\RocketMQ\课件\RocketMQ分布式消息队列课件.assets\image-20210903105241702.png)]

rocketmq目录下,新建logs和store两个目录;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gtpvqxft-1631928711296)(C:\Users\java1234\Desktop\RocketMQ\课件\RocketMQ分布式消息队列课件.assets\image-20210903111034443.png)]

logs是存储rocketmq日志的目录;

store是存储rocketmq数据文件的目录;

在store目录再新建commitlogconsumequeueindex三个目录;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W24MCxNC-1631928711298)(C:\Users\java1234\Desktop\RocketMQ\课件\RocketMQ分布式消息队列课件.assets\image-20210903161519891.png)]

commitlog存储RocketMQ消息信息目录;

consumequeueindex存储索引文件数据目录;

我们先配置单节点,修改conf下的2m-2s-sync配置文件;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gVKXUSNG-1631928711299)(C:\Users\java1234\Desktop\RocketMQ\课件\RocketMQ分布式消息队列课件.assets\image-20210904155051045.png)]

覆盖掉broker-a.properties配置文件内容:

brokerClusterName=rocketmq-cluster
#broker名字,名字可重复,为了管理,每个master起一个名字,他的slave同他,eg:Amaster叫broker-a,他的slave也叫broker-a
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.0.110:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口,
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/home/mq/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/home/mq/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/mq/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/mq/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/mq/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

这里有个 刷盘方式 具体讲下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kpqGGj5V-1631928711300)(C:\Users\java1234\Desktop\RocketMQ\课件\RocketMQ分布式消息队列课件.assets\image-20210904155630481.png)]

RocketMQ提供了两种刷盘策略同步刷盘、异步刷盘

同步刷盘:在消息到达MQ后,RocketMQ需要将数据持久化,同步刷盘是指数据到达内存之后,必须刷到commitlog日志之后才算成功,然后返回producer数据已经发送成功。

异步刷盘:,同步刷盘是指数据到达内存之后,返回producer说数据已经发送成功。,然后再写入commitlog日志。

复制方式 优点 缺点 适应场景
同步刷盘 保证了消息不丢失 吞吐率相对于异步刷盘要低 消息可靠性要求较高的场景
异步刷盘 系统的吞吐量提高 系统断电等异常时会有部分丢失 对应吞吐量要求较高的场景

进入conf目录下,替换掉所有xml中的${user.home},确保日志路径正确

执行:

sed -i 's#${user.home}#/home/mq/rocketmq#g' *.xml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zKAymSeo-1631928711301)(C:\Users\java1234\Desktop\RocketMQ\课件\RocketMQ分布式消息队列课件.assets\image-20210904161751621.png)]

路径全部替换了;

Rocketmq启动对内存要求比较高,一般至少1个G内存,否则会影响RocketMQ的性能;

默认配置内存比较高,虚拟机不方便演示,所以我们修改下bin目录下的runbroker.sh和runserver.sh文件;

runbroker.sh

JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

改成

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g"

runserver.sh

JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

改成

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

先启动nameserver(后台运行方式启动):

nohup sh mqnamesrv &

再启动broker(后台运行方式启动)

 nohup sh mqbroker -c /home/mq/rocketmq/conf/2m-2s-sync/broker-a.properties &

可以用jps查看进程:

jps
83545 Jps
65852 NamesrvStartup
83310 BrokerStartup

备注:关闭命令

先关闭broker,再关闭nameserver

sh mqshutdown broker
sh mqshutdown namesrv

我们代码测试下:

把消费端,生产端的rocketmq.name-server值改成:虚拟机IP地址:9876

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3nhXFod0-1631928711301)(C:\Users\java1234\Desktop\RocketMQ\课件\RocketMQ分布式消息队列课件.assets\image-20210904173619206.png)]

启动测试OK;