RocketMQ发送消息默认是什么策略,主同步成功了就算成功了?异步写?还是要大部分从都同步了?

文章内容收录到个人网站,方便阅读:hardyfish.top/

资料分享

RocketMQ技术内幕:

RocketMQ 默认的主从同步模式是同步到至少一个从节点后返回发送成功,并不是要求同步到所有从节点或大多数从节点。

以下是详细解释:

1. 默认主从同步规则

1.1 同步到一个从节点

  • SYNC_MASTER 模式下,主节点在消息写入磁盘(同步刷盘)后,会将消息同步到 至少一个从节点
  • 只有主节点确认消息已经成功同步到某个从节点后,才会返回给生产者发送成功。

1.2 不同步所有从节点

  • 默认情况下,RocketMQ 并不会强制要求同步到所有从节点,原因是:

    • 同步到所有从节点会增加延迟。
    • 可能会因为网络或从节点的故障,导致消息发送失败的概率增加。

2. 为什么只需要同步到一个从节点

  1. 数据可靠性保障

    • 同步到至少一个从节点后,即使主节点崩溃,从节点也可以通过主从切换继续提供服务。
    • 这种方式在可靠性和性能之间找到了平衡。
  2. 提升性能

    • 如果要求同步到所有从节点,主节点需要等待所有从节点完成同步,可能显著增加消息发送的延迟。
    • 同步到一个从节点即可显著降低延迟。
  3. 分布式一致性

    • RocketMQ 采用的是 主从复制架构,而非分布式共识协议(如 Raft)。因此,默认只需同步到一个从节点即可满足实际需求。

3. 可调整策略

RocketMQ 的主从同步行为可以通过配置项进行调整。如果需要更高的可靠性,可以使用自定义实现或调整同步逻辑:

  1. SYNC_MASTER 模式

    • 默认同步到一个从节点。
    • 不会等待所有从节点完成同步。
  2. 强一致性需求

    • 如果需要所有从节点同步完成,可以通过修改源码或自定义逻辑实现。
  3. 异步模式(ASYNC_MASTER)

    • 主节点不等待从节点同步完成,直接返回生产者发送成功,提升吞吐量,但会降低可靠性。

4. 总结

在 RocketMQ 默认的 SYNC_MASTER 模式下,主节点需要 同步到至少一个从节点 后,才返回发送成功。

这种策略在可靠性和性能之间找到了良好的平衡:

  1. 同步到一个从节点:保证主节点崩溃时,至少一个从节点有完整的数据。
  2. 不要求同步所有从节点:避免增加消息发送的延迟。

如果对一致性有更高要求,可以通过自定义实现强制同步到所有从节点,但需权衡性能影响。

相关推荐
爬山算法2 分钟前
Hibernate(88)如何在负载测试中使用Hibernate?
java·后端·hibernate
自不量力的A同学6 分钟前
Solon AI v3.9 正式发布:全能 Skill 爆发
java·网络·人工智能
万岳科技系统开发17 分钟前
食堂采购系统源码库存扣减算法与并发控制实现详解
java·前端·数据库·算法
独断万古他化21 分钟前
【Spring 原理】Bean 的作用域与生命周期
java·后端·spring
*小海豚*26 分钟前
在linux服务器上DNS正常,但是java应用调用第三方解析域名报错
java·linux·服务器
我爱加班、、31 分钟前
Websocket能携带token过去后端吗
前端·后端·websocket
撩得Android一次心动42 分钟前
Android LiveData 全面解析:使用Java构建响应式UI【源码篇】
android·java·android jetpack·livedata
组合缺一1 小时前
Solon AI (Java) v3.9 正式发布:全能 Skill 爆发,Agent 协作更专业!仍然支持 java8!
java·人工智能·ai·llm·agent·solon·mcp
MSTcheng.1 小时前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
愚者游世1 小时前
Delegating Constructor(委托构造函数)各版本异同
开发语言·c++·程序人生·面试·改行学it