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三个值中的一个。
这个配置是根据角色来配置的,
brokerRole=ASYNC_MASTER
brokerRole的配置说明:
ASYNC_MASTER 异步复制Master
SYNC_MASTER 同步双写Master
SLAVE 就是从节点,只负责接收master的请求