RocketMQ消息主从复制原理

我们在搭建RocketMQ集群的时候会有master节点,下面会有slave节点, producer发送消息给master节点之后,master节点会把消息同步给slave节点上进行存储,同步数据的时候就会有个同步复制还是异步复制的问题.

同步复制

master节点发送消息给slave节点之后,master节点会进行等待, 等master和slave都写入消息成功后才反馈给客户端写入成功的状态,master节点才会接着同步下面的数据.

在同步复制下,如果Master节点故障,Slave上有全部的数据备份,这样容易恢复数据。但是同步复制会增大数据写入的延迟,降低系统的吞吐量。

异步复制

异步复制是只要master写入消息成功,就反馈给客户端写入成功的状态。然后再异步的将消息复制给Slave节点,然后Slave自己就进行保存数据.

在异步复制下,系统拥有较低的延迟和较高的吞吐量。但是如果master节点故障,而有些数据没有完成复制,就会造成数据丢失。

配置方式

配置文件就是在RocketMQ的conf目录下的 2m-2s-async 文件夹, 其中async就代表异步同步的

消息复制方式是通过Broker配置文件里的brokerRole参数进行设置的,这个参数可以被设置成ASYNC_MASTER、 SYNC_MASTER、SLAVE三个值中的一个。

这个配置是根据角色来配置的,

  1. brokerRole=ASYNC_MASTER

brokerRole的配置说明:
ASYNC_MASTER 异步复制Master
SYNC_MASTER 同步双写Master
SLAVE 就是从节点,只负责接收master的请求