数据同步过程:
RocketMQ 的主从同步机制如下:
(1) slave启动,跟master建立连接
(2) slave 以5秒的间隔,向master拉取消息,如果是第一次拉取的话,先获取本地commitlog文件中最大的偏移量,以该偏移量向服务端拉取消息;
(3) master将数据返回给slave
(4) slave将数据写入自身commitLog中,更新偏移量;重复以上步骤
读写分离机制:
(1) 首先读写分离都是,写master,读slave;搭配主从同步机制
(2) RocketMQ 有属于自己的一套读写分离逻辑,它会判断主服务器的消息堆积量来决定消费者是否向从服务器拉取消息消费,阈值是大于内存的40%;默认消费者还是读master
(3) 当发现内存大于阈值,则slaveReadEnable 设置为true,然后设置suggestWhichBrokerId 为从机的BrokerID
消费进度同步:
(1) 消息消费进度的同步时单向的,从服务器开启一个定时任务,定时从主服务器同步消息消费进度;
(2) 无论消息消费者是从主服务器拉的消息还是从从服务器拉取的消息,在向Broker反馈消息消费进度时,优先向主服务器汇报