RocketMQ安装部署

一、简介rocketMQ

二、相关术语

1.Nameserver 
       为整个MQ集群提供服务协调与治理,可集群部署。集群中Nameserver互相独立,彼此没有通信关系,每个节点独立记录维护完整的Topic、Broker的信息,及监控Broker的运行状态。
2.Broker
         为MQ集群提供消息中转、存储服务。Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有NameServer。
3.Master
         Broker中的主节点,接收生产者消息,同步消息给Slave,也可以被消费者读取。
4.Slave
          特殊的Broker节点,Slave节点不可以接收生产者消息,只能被消费者读取。
5.异步复制
          Broker主从节点的消息同步机制,消息先写入master节点,然后再通过异步线程复制到slave节点。
6.同步双写
          Broker主从节点的消息同步机制,消息同时写入master节点和slave节点。
7.异步刷盘
          采用ZeroCopy模式持久化消息,消息写入pagecache后,直接向应用返回。由异步线程负责将pagecache写入硬盘。
8.同步刷盘

       采用ZeroCopy模式持久化消息,消息写入pagecache后,由同步线程将pagecache写入硬盘后,主备都写成功后,向应用返回成功。

三、集群部署模式

1.单Master模式
        配置简单,服务稳定性不高,服务器的重启宕机网络异常都会导致整个服务不可用。
2.多Master模式
       全是Master,没有Slave节点,配置简单,性能最高;单机服务重启或者宕机期间,Master上未被消费的消息在Master没有恢复之前不可以订阅。
3.一主多从模式
        一个主maste对应多个slave;提高数据消费能力和服务稳定性,主服务宕机会造成消息发送服务不可用;主从数据同步分为异步复制和同步双写。
4.双主双从模式
         两主两从,每个Master配一个Slave,保障集群无单点故障问题/高可用集群
5.多主多从模式
       每个Master配一个Slave,有多对Master-Slave,服务高可用,主备之间异步复制异常时有少量数据丢失,主备之间同步双写异常时备服务机不能自动切换为主。

主备模式下为了提高服务高可用性,提升容灾能力,一般有热备、冷备、双活三种备份方式。冷备是指周期性进行数据备份,对于数据队列而言,如果主服务宕机会有大量数据不同步,基本上无法满足要求;热备是指实时进行数据备份,主服务宕机后可以实时切换服务,只是备用服务平时不提供服务,因此会造成资源浪费以及切换服务后的不确定性;双活是指主备之间实时同步数据,共同承担业务,可以较大的提升服务高可用和提升资源利用率。RocketMQ集群部署我们主要熟悉三种不同安全级别的双活模式。


6.同城双活模式
        同城双活在同一个城市部署双机房,通常每个机房采用多个网络服务商或者接入不同的网络服务商,平时就是双机房对外提供服务,出问题的时候切掉故障机房,真正实现容灾的目的。
7.异地双活模式
          异地双活在不同的地区部署双机房,于提供服务能力相比,更多的方面在于应对地质灾害等影响较大的不可控灾害。
8.跨国双活模式
         跨国双活指在不同的国家不同城市部署双活服务,主要应对政治动荡,适用于跨国公司在应对国际局势的能力。

四、RocketMQ集群特性分析

1.Nameserver
           NameServer之间彼此独立,独立维护完整的Topic,Broker信息。
 
2.Broker与Nameserver关系
        每个Broker与系统中所有的Nameserver保持长连接,并且每30s发送心跳,同步自身的topic配置信息。同时Nameserver每隔10秒钟扫描Broker状态,两分钟无应答则断开连接,并立即更新topic与队列的对应关系。Broker恢复后,重新向所有NameServer同步消息。
3.Consumer与Nameserver关系
       单个消费者和一台nameserver保持长连接;默认情况下,消费者每隔30秒从nameserver获取所有topic的最新队列情况,刷新时间可手动设置;连接失败时能自动重连到其他Nameserver。
4.Consumer与Broker关系
       消费者与提供消费者订阅的所有topic的所有broker保持长连接;默认情况下,消费者每隔30秒向所有broker发送心跳,broker每隔10秒钟,扫描所有存活连接;连接2分钟内无心跳则断开连接,并向其他订阅消费这发送通知;broker根据topic和queueID维护消息队列,一个消费者可以消费多个队列,每个队列只能由一个消费者消费。
5.Producer与Nameserver关系
        单个生产者者和一台nameserver保持长连接,定时查询topic配置信息,如果该nameserver挂掉,生产者会自动连接下一个nameserver,直到有可用连接为止,并能自动重连。
6.Producer与Broker关系

        生产者与提供生产者的所有topic的所有broker保持长连接;默认情况下,生产者每隔30秒向所有broker发送心跳;broker每隔10秒钟,扫描存活的连接;两分钟无心跳则断开连接。

五、RocketMQ分布式部署实践案例详述


RocketMQ部署主要是broker-*.properties配置文件。这里我备注几个关键点:

  1. brokerClusterName:所属集群名字,同一个集群的Broker,集群名字需要保持一致。
  2. brokerName:broker名字,同一组的Master和SlaveBrokerName保持一致;不同组的保持不一致。
  3. brokerId:broker主从属性,0 表示 Master,>0 表示 Slave
  4. defaultTopicQueueNums:broker默认给Topic创建的队列数量,默认4;队列数最好是consumer实例数目的整数倍,以便消息均匀分布到每台consumer上;最好是Broker的整数倍,以便均匀在每台broker上创建队列。

分享一个他人的配置文件,注解很详细。

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,
brokerName=broker-a
#broker主从标记,0 表示 Master,>0 表示 Slave
brokerId=0
#nameServer地址,这里nameserver是单台,如果nameserver是多台集群的话,就用分号分割(即namesrvAddr=ip1:port1;ip2:port2;ip3:port3或者修改hosts文件不使用IP而是域名)
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876;rocketmq-nameserver3:9876;rocketmq-nameserver4:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数。由于是4个broker节点,所以设置为4
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=/usr/local/rocketmq/store
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketmq/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/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=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

参考资料:

《rocketMQ安装部署详细解析》

《RocketMQ-双主双从搭建》

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值