文章内容收录到个人网站,方便阅读:hardyfish.top/
资料分享
RocketMQ技术内幕:
- 资料链接:url81.ctfile.com/f/57345181-...
- 访问密码:3899
RocketMQ 默认的主从同步模式是同步到至少一个从节点后返回发送成功,并不是要求同步到所有从节点或大多数从节点。
以下是详细解释:
1. 默认主从同步规则
1.1 同步到一个从节点
- 在 SYNC_MASTER 模式下,主节点在消息写入磁盘(同步刷盘)后,会将消息同步到 至少一个从节点。
- 只有主节点确认消息已经成功同步到某个从节点后,才会返回给生产者发送成功。
1.2 不同步所有从节点
-
默认情况下,RocketMQ 并不会强制要求同步到所有从节点,原因是:
- 同步到所有从节点会增加延迟。
- 可能会因为网络或从节点的故障,导致消息发送失败的概率增加。
2. 为什么只需要同步到一个从节点
-
数据可靠性保障
- 同步到至少一个从节点后,即使主节点崩溃,从节点也可以通过主从切换继续提供服务。
- 这种方式在可靠性和性能之间找到了平衡。
-
提升性能
- 如果要求同步到所有从节点,主节点需要等待所有从节点完成同步,可能显著增加消息发送的延迟。
- 同步到一个从节点即可显著降低延迟。
-
分布式一致性
- RocketMQ 采用的是 主从复制架构,而非分布式共识协议(如 Raft)。因此,默认只需同步到一个从节点即可满足实际需求。
3. 可调整策略
RocketMQ 的主从同步行为可以通过配置项进行调整。如果需要更高的可靠性,可以使用自定义实现或调整同步逻辑:
-
SYNC_MASTER
模式:- 默认同步到一个从节点。
- 不会等待所有从节点完成同步。
-
强一致性需求:
- 如果需要所有从节点同步完成,可以通过修改源码或自定义逻辑实现。
-
异步模式(ASYNC_MASTER) :
- 主节点不等待从节点同步完成,直接返回生产者发送成功,提升吞吐量,但会降低可靠性。
4. 总结
在 RocketMQ 默认的 SYNC_MASTER 模式下,主节点需要 同步到至少一个从节点 后,才返回发送成功。
这种策略在可靠性和性能之间找到了良好的平衡:
- 同步到一个从节点:保证主节点崩溃时,至少一个从节点有完整的数据。
- 不要求同步所有从节点:避免增加消息发送的延迟。
如果对一致性有更高要求,可以通过自定义实现强制同步到所有从节点,但需权衡性能影响。