13-RocketMQ集群
RocketMQ集群
broker集群模式
单master模式
- 只有一个 Master节点
优点:配置简单,方便部署
缺点:这种方式风险较大,一旦Broker重启或者宕机时,会导致整个服务不可用,不建议线上环境使用
多master模式
- 一个集群无 Slave,全是 Master,例如 2 个 Master 或者 3 个 Master
- 优点:配置简单,单个Master 宕机或重启维护对应用无影响,在磁盘配置为RAID10 时,即使机器宕机不可恢复情况下,由与 RAID10磁盘非常可靠,消息也不会丢(异步刷盘丢失少量消息,同步刷盘一条不丢)。性能最高。
- 缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响
多Master多Slave模式(异步复制)
- 每个 Master 配置一个 Slave,有多对Master-Slave, HA,采用异步复制方式,主备有短暂消息延迟,毫秒级。
- 优点:即使磁盘损坏,消息丢失的非常少,且消息实时性不会受影响,因为Master 宕机后,消费者仍然可以从 Slave消费,此过程对应用透明。不需要人工干预。性能同多 Master 模式几乎一样。
- 缺点: Master 宕机,磁盘损坏情况,会丢失少量消息。
多Master多Slave模式(同步双写)
- 每个 Master 配置一个 Slave,有多对Master-Slave, HA采用同步双写方式,主备都写成功,向应用返回成功。
- 优点:数据与服务都无单点, Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高
- 缺点:性能比异步复制模式略低,大约低 10%左右,发送单个消息的 RT会略高。目前主宕机后,备机不能自动切换为主机,后续会支持自动切换功能
broker配置
Property Name Default value Details listenPort 10911 listen port for client namesrvAddr null name server address brokerIP1 InetAddress for network interface Should be configured if having multiple addresses brokerName null broker name brokerClusterName DefaultCluster this broker belongs to which cluster brokerId 0 broker id, 0 means master, positive integers mean slave storePathCommitLog $HOME/store/commitlog/ file path for commit log storePathConsumerQueue $HOME/store/consumequeue/ file path for consume queue mapedFileSizeCommitLog 1024 * 1024 * 1024(1G) mapped file size for commit log deleteWhen 04 When to delete the commitlog which is out of the reserve time fileReserverdTime 72 The number of hours to keep a commitlog before deleting it brokerRole ASYNC_MASTER SYNC_MASTER/ASYNC_MASTER/SLAVE flushDiskType ASYNC_FLUSH {SYNC_FLUSH/ASYNC_FLUSH}. Broker of SYNC_FLUSH mode flushes each message onto disk before acknowledging producer. Broker of ASYNC_FLUSH mode, on the other hand, takes advantage of group-committing, achieving better performance - brokerClusterName:同一个集群中,brokerClusterName需一致
brokerId:0 表示 Master,>0 表示 Slave
namesrvAddr:配置多个用分号分隔
brokerIP1:默认系统自动识别,但是某些多网卡机器会存在识别错误的情况,建议都手工指定
brokerRole:选择Broker的角色
flushDiskType:选择刷盘方式
deleteWhen: 过期文件真正删除时间
fileReservedTime:Commitlog、ConsumeQueue文件,如果非当前写文件在一定时间间隔内没有再次被更新,则认为是过期文件,可以被删除,RocketMQ不会管这个这个文件上的消息是否被全部消费
DLedger主备切换
- 一组相同名称的 Broker,至少需要 3 个节点,通过 Raft 自动选举出一个 Leader,其余节点 作为 Follower,并在 Leader 和 Follower 之间复制数据以保证高可用。
- RocketMQ-on-DLedger Group 能自动容灾切换,并保证数据一致。
- RocketMQ-on-DLedger Group 是可以水平扩展的,也即可以部署任意多个 RocketMQ-on-DLedger Group 同时对外提供服务。
Dleger配置
name 含义 举例 enableDLegerCommitLog 是否启动 DLedger true dLegerGroup DLedger Raft Group的名字,建议和 brokerName 保持一致 RaftNode00 dLegerPeers DLedger Group 内各节点的端口信息,同一个 Group 内的各个节点配置必须要保证一致 n0-127.0.0.1:40911;n1-127.0.0.1:40912;n2-127.0.0.1:40913 dLegerSelfId 节点 id, 必须属于 dLegerPeers 中的一个;同 Group 内各个节点要唯一 n0 sendMessageThreadPoolNums 发送线程个数,建议配置成 Cpu 核数 16 dleger
enableDLegerCommitLog = true
dLegerGroup = broker-a
dLegerPeers = n0-192.168.150.210:40911;n1-192.168.150.211:40911
dLegerSelfId = n0
sendMessageThreadPoolNums = 4
13-RocketMQ集群
https://x-leonidas.github.io/2022/02/01/11技术栈/MQ/13-RocketMQ集群/