Rocketmq主从同步有同步复制、异步复制两种策略,但不管是哪一种策略,底层同步逻辑是一致的:均是由slave不断轮询master拉取消息,并提交同步offset。
在SYNC_MASTER场景下:消息发送到master后,暂时不返回成功/失败,而是等待slave拉取。slave按照顺序从前往后拉取,拉到了该条消息后,master才返回落盘成功。若在规定时间内(默认3s)没有拉取到该消息,则master会返回一个FLUSH_SLAVE_TIMEOUT异常给发送方,此时该消息发送即算作失败。
在ASYNC_MASTER场景下:消息发送到master后,不管slave有没有拉取到该消息,master都会返回成功。