RocketMQ集群解决方案

一、应用场景及性能(在使用RocketMq之前我们要思考这框架能帮我们解决什么现实问题)


  1、异步处理,将不是必须的业务逻辑,进行异步处理,比如注册之后短信、邮箱的发送

  2、应用解耦,
       订单系统:用户下单后,订单系统完成持久化处理,将消息写入消息队列,返回用户订单下单成功。
       库存系统:订阅下单的消息,采用拉/推的方式,获取下单信息,库存系统根据下单信息,进行库存操作。
       假如:在下单时库存系统不能正常使用。也不影响正常下单,因为下单后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦。

  3、流量削锋,也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛。
     应用场景:秒杀活动,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。
     3.1、可以控制活动的人数;
     3.2、可以缓解短时间内高流量压垮应用;
     3.3、用户的请求,服务器接收后,首先写入消息队列。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面;
     3.4、秒杀业务根据消息队列中的请求信息,再做后续处理。

  4、日志处理
  
  5、消息通讯
        消息通讯是指,消息队列一般都内置了高效的通信机制,因此也可以用在纯的消息通讯。比如实现点对点消息队列,或者聊天室等。


  6、性能:
        RocketMQ单机也可以支持亿级的消息堆积能力
        单机写入TPS单实例约7万条/秒,单机部署3个Broker,可以跑到最高12万条/秒,消息大小10个字节

二、RocketMQ网络部署图


  网络集群节点描述

     1、Name Server 可集群部署,节点之间无任何信息同步。


     2、Broker(消息中转角色,负责存储消息,转发消息) 部署相对复杂,Broker 分为Master 与Slave,一个Master 可以对应多个Slave,但是一个Slave 只能对应一个Master,Master 与Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId来定 义,BrokerId为0 表示Master,非0 表示Slave。Master 也可以部署多个。每个Broker 与Name。


    3、Producer 与Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从Name Server 取Topic 路由信息,并向提供Topic 服务的Master 建立长连接,且定时向Master 发送心跳。Producer 完全无状态,可集群部署。


    4、Consumer 与Name Server 集群中的其中一个节点(随机选择)建立长连接,定期从Name Server 取Topic 路由信息,并向提供Topic 服务的Master、Slave 建立长连接,且定时向Master、Slave 发送心跳。Consumer既可以从Master 订阅消息,也可以从Slave 订阅消息,订阅规则由Broker 配置决定。



三、实际集群部署操作步骤(采用多Master多Slave,异步复制集群模式进行部署)
1、下载部署包  alibaba-rocketmq-3.2.6.tar.gz
2、将下载的包放入并解压到Linux系统指定目录中,在这里我以/home/目录为例,准备四台虚拟机服务器分别为       
     rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
下面步骤就不区分是在哪台服务器进行操作了,步骤都是一样的
     -- 解压
     #tar -zxvf alibaba-rocketmq-3.2.6.tar.gz
     -- 修改配置文件由于我们采用的是异步复制模式,所以需要修改2m-2s-async配置内容,-- 2m-2s-sync 是代表同步复制模式 ,2m-noslave是代表单击模式
     #修改RoakctMq主节点 
     #vim  /home/alibaba-rocketmq/conf/2m-2s-async/broker-a.properties 
#---------------------------------------主节点配置信息----------------------------------------------------
#Broker所属哪个集群,默认【DefaultCluster】
brokerClusterName=Default-RocketMq-Cluster
#broker 实列名称,主从关系的需要保持名称一致
brokerName=broker-a
#BrokerId,必须是大等于0的整数,0表示Master,>0表示Slave
brokerId=0

#brokerIP1=192.168.74.131
#删除文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间,默认48小时
fileReservedTime=48
#- ASYNC_MASTER 异步复制Master  
#- SYNC_MASTER  同步双写Master  
#- SLAVE

brokerRole=ASYNC_MASTER
#刷盘方式 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#Name Server地址
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#Broker对外服务的监听端口,默认【10911】
listenPort=10911
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭,默认【true】
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭,默认【true】
autoCreateSubscriptionGroup=true
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=50000000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/alibaba-rocketmq/data/store
storePathCommitLog=/usr/local/alibaba-rocketmq/data/store/commitlog
#消费队列存储路径存储路径  
storePathConsumeQueue=/usr/local/alibaba-rocketmq/data/store/consumequeue
#消息索引存储路径  
storePathIndex=/usr/local/alibaba-rocketmq/data/store/index
#checkpoint 文件存储路径  
storeCheckpoint=/usr/local/alibaba-rocketmq/data/store/checkpoint
#abort 文件存储路径  
abortFile=/usr/local/alibaba-rocketmq/data/store/abort
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
sendMessageThreadPoolNums=128
pullMessageThreadPoolNums=128
#---------------------------------------结束--->主节点配置信息----------------------------------------------------
#---------------------------------------开始--->从节点配置信息----------------------------------------------------
#修改Salves
#vim   /home/alibaba-rocketmq/conf/2m-2s-async/ broker-a-s.properties
#Broker所属哪个集群,默认【DefaultCluster】
brokerClusterName=Default-RocketMq-Cluster
#broker 实列名称,主从关系的需要保持名称一致
brokerName=broker-a
#BrokerId,必须是大等于0的整数,0表示Master,>0表示Slave,一个Master可以挂多个Slave,Master与Slave通过BrokerName来配对,默认【0】
brokerId=1
#brokerIP1=192.168.74.134
#删除文件时间点,默认凌晨4点
deleteWhen=04
#文件保留时间,默认48小时
fileReservedTime=48
#- ASYNC_MASTER 异步复制Master  
#- SYNC_MASTER 同步双写Master  
#- SLAVE   
brokerRole=SLAVE
#刷盘方式 - ASYNC_FLUSH 异步刷盘 - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#Name Server地址
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#Broker对外服务的监听端口,默认【10911】
listenPort=10911
defaultTopicQueueNums=4
#是否允许Broker自动创建Topic,建议线下开启,线上关闭,默认【true】
autoCreateTopicEnable=true
#是否允许Broker自动创建订阅组,建议线下开启,线上关闭,默认【true】
autoCreateSubscriptionGroup=true
mapedFileSizeCommitLog=1073741824
mapedFileSizeConsumeQueue=50000000
destroyMapedFileIntervalForcibly=120000
redeleteHangedFileInterval=120000
diskMaxUsedSpaceRatio=88
storePathRootDir=/usr/local/alibaba-rocketmq/data/store
storePathCommitLog=/usr/local/alibaba-rocketmq/data/store/commitlog
#消费队列存储路径存储路径  
storePathConsumeQueue=/usr/local/alibaba-rocketmq/data/store/consumequeue
#消息索引存储路径  
storePathIndex=/usr/local/alibaba-rocketmq/data/index
#checkpoint 文件存储路径  
storeCheckpoint=/usr/local/alibaba-rocketmq/data/checkpoint
#abort 文件存储路径  
abortFile=/usr/local/alibaba-rocketmq/data/abort
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
sendMessageThreadPoolNums=128
pullMessageThreadPoolNums=128
#---------------------------------------结束--->从节点配置信息----------------------------------------------------

 3、启动RocketMQ
 3.1、 在rocketmq-nameserver1启动Maste broker-a 服务(进入/home/alibaba-rocketmq/bin 目录)
 #nohup sh mqnamesrv &
 #nohup sh mqbroker -c /home/alibaba-rocketmq/conf/2m-2s-async/broker-a.properties >/dev/null 2>&1 & 

 3.2、 在rocketmq-nameserver4启动Slavebroker-a-s服务(进入 /home/alibaba-rocketmq/bin 目录)
 #nohup sh mqnamesrv &
 #nohup sh mqbroker -c /home/alibaba-rocketmq/conf/2m-2s-async/broker-a-s.properties >/dev/null 2>&1 & 

 3.3、 在rocketmq-nameserver4启动Slave broker-b服务(进入 /home/alibaba-rocketmq/bin 目录)
 #nohup sh mqnamesrv &
 #nohup sh mqbroker -c /home/alibaba-rocketmq/conf/2m-2s-async/broker-b.properties >/dev/null 2>&1 & 

 3.4、 在rocketmq-nameserver4启动Slave broker-b-s服务(进入 /home/alibaba-rocketmq/bin 目录)
 #nohup sh mqnamesrv &
 #nohup sh mqbroker -c /home/alibaba-rocketmq/conf/2m-2s-async/broker-b-s.properties >/dev/null 2>&1 & 


  3.3、JPS检查
 #jps 
查看是否有如下进程,如果有则服务启动成功:
BrokerStartup
NamesrvStartup
关停服务命令:
#sh mqshutdown namesrv  
#sh mqshutdown broker 
#注意要关闭节点上的防火墙,不然集群访问不了,也不能接受Produce消息
-- 查看防火墙状态信息
service iptables status
-- 关闭防火墙(很重要)
service iptables stop


3.4、常用命令
--查看所有消费组group
#sh mqadmin consumerProgress -n rocketmq-nameserver1:9876
--看指定消费组下的所有topic数据堆积情况
#sh mqadmin consumerProgress -n 1rocketmq-nameserver1:9876 -g myProducer
查看指定报文信息 C0A8718A00002A9F000000000000F790 指的是报文在MQ队列中的MSG_ID
#sh mqadmin queryMsgById -n rocketmq-nameserver1:9876 -i C0A8718A00002A9F000000000000F790

--查看Topic 列表信息
#sh mqadmin topicList  -n rocketmq-nameserver1:9876
--查看topic信息列表详情统计
#sh mqadmin topicstatus -n rocketmq-nameserver1:9876 -t Topic
--查看集群消息
#sh mqadmin clusterList  -n 1rocketmq-nameserver1:9876  



  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值