1、RocketMQ网络部署图
1.1 RocketMQ网络部署特点:
-
NameServer是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。相对来说,nameserver的稳定性非常高。原因有二:
1)nameserver互相独立,彼此没有通信关系,单台nameserver挂掉,不影响其他nameserver,即使全部挂掉,也不影响业务系统使用。无状态
2)nameserver不会有频繁的读写,所以性能开销非常小,稳定性很高。
-
Broker部署相对复杂,Broker四种集群方式
Broker分为Master与Slave(Slave不可写,但可读,类似于MySQL的主备方式),一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic信息到所有 NameServer。
1)单个master:这是一种风险比较大的集群方式,因为一旦Borker重启或宕机期间,将会导致这个服务不可用,因此是不建议线上环境去使用的。
2)多个master:一个集群全部都是Master,没有Slave。优点:配置简单,单个Master宕机或者是重启维护对应用没有什么影响的,在磁盘配置为RAID10时,即使机器宕机不可恢复的情况下,消息也不会丢失(异步刷盘丢失少量消息,同步刷盘则是一条都不会丢失),性能最高
缺点:当单个Broker宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息的实时性会受到影响
3)多master多salve异步复制,每个Master配置一个Slave,有多对的Master-Slave,HA采用的是异步复制方式,主备有短暂的消息延迟,毫秒级别的(Master收到消息之后立刻向应用返回成功标识,同时向Slave写入消息)。
优点:即使是磁盘损坏了,消息丢失的非常少,且消息实时性不会受到影响,因为Master宕机之后,消费者仍然可以从Slave消费,此过程对应用透明,不需要人工干预,性能同多个Master模式机会一样。
缺点:Master宕机,磁盘损坏的情况下,会丢失少量的消息
4)多master多salve同步双写,每个Master配置一个Slave,有多对的Master-Slave,HA采用的是同步双写模式,主备都写成功,才会向应用返回成功。
优点:数据与服务都无单点,Master宕机的情况下,消息无延迟,服务可用性与数据可用性都非常高
缺点:性能比异步复制模式略低,大约低10%左右,发送单个Master的RT会略高,目前主机宕机后,Slave不能自动切换为主机,后续会支持自动切换功能。
- Producer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
- Consumer与NameServer集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。
1.2 安装及使用步骤:
2. RocketMQ配置文件
众所周知,RocketMQ有多种集群部署方式,它们的配置文件也是分开的,在安装包conf目录下有官方自带配置文件模版自上而下依次是:两主两从异步,两主两从同步,两主
如下:
说明:
- 2m-noslave: 多Master模式
- 2m-2s-sync: 多Master多Slave模式,同步双写
- 2m-2s-async:多Master多Slave模式,异步复制
其中namesrvAddr:主机地址,brokerClusterName:集群名称,brokerName :分片名称 ,deleteWhen=04:删除文件时间点,默认是凌晨4点
,fileReservedTime=120:文件保留时间,默认48小时,brokerId:分片id编号 ;brokerRole分片角色。
注意:其中主从之间的分片名称相同。主从区分是brokerId 主 0,从 1。brokerRole 主MASTER从SLAVE。
RocketMQ默认提供的配置文件都是最基本的,很多配置都是默认值,生产环境中需要根据实际情况进行修改。
#所属集群名字 brokerClusterName=rocketmq-cluster #broker名字,注意此处不同的配置文件填写的不一样 brokerName=broker-a|broker-b #0表示Master,>0表示Slave brokerId=0 #nameServer地址,分号分割 namesrvAddr=192.168.1.101:9876;192.168.1.102: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=/usr/local/alibaba-rocketmq/store #commitLog 存储路径 storePathCommitLog=/usr/local/alibaba-rocketmq/store/commitlog #消费队列存储路径存储路径 storePathConsumeQueue=/usr/local/alibaba-rocketmq/store/consumequeue #消息索引存储路径 storePathIndex=/usr/local/alibaba-rocketmq/store/index #checkpoint 文件存储路径 storeCheckpoint=/usr/local/alibaba-rocketmq/store/checkpoint #abort 文件存储路径 abortFile=/usr/local/alibaba-rocketmq/store/abort #限制的消息大小 maxMessageSize=65536 #flushCommitLogLeastPages=4 #flushConsumeQueueLeastPages=2 #flushCommitLogThoroughInterval=10000 #flushConsumeQueueThoroughInterval=60000 #Broker 的角色 #- ASYNC_MASTER 异步复制Master #- SYNC_MASTER 同步双写Master #- SLAVE brokerRole=ASYNC_MASTER #刷盘方式 #- ASYNC_FLUSH 异步刷盘 #- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH #checkTransactionMessageEnable=false #发消息线程池数量 #sendMessageThreadPoolNums=128 #拉消息线程池数量 #pullMessageThreadPoolNums=128