当前位置: 首页 > news >正文

RocketMQ 高可用集群架构与一致性机制解析

分布式场景中一致性问题:

1.服务器不稳定:随时泵机的可能

2.网络问题:导致请求丢失

3.网速问题:难以保证请求顺序性,最终结果数据一致性需要操作顺序性保证

4.快速响应:不能因为一致性,导致响应以集群中最慢的为准。

常见的算法

弱一致性算法:DNS系统,Gossip协议(Redis Cluster

强一致性算法:Basic-Paxos、Multi-Paxos包括Raft系列(Nacos的JRaft,Kafka的Kraft以及RocketMQ的Dledger)、ZAB(Zookeeper)

Raft

log日志保存在server上的操作日志,每个命令成为Entry,主要是保证Entry的顺序一致,而不是Entry不会丢失(最终一致性),所有的操作最终都会落入State Machine。

工作流程:

1.多个server选举产生leader,负责客户端请求

2.leader通过一致性协议,像节点发送心跳以及客户端命令

3.每个节点将指令保存到log中,此时的uncommit状态

4.当大多数共同保存了Entry,就可以执行指令,保存到State Machine里,此时Entry状态为commit;

需要考虑的点:

角色:Leader、Follower和Candidate

log中的指针,一个是commit节点,一个是Leader往follower里发送后数据的指针

等待时间/超时时间:随机时间150ms到300ms 选举leader用到

脑裂问题:网络波动导致,通过Term任期解决

数据丢失情况:因为要保证只能有一个主节点,因此,脑裂期间,小Term里的数据会丢失。

因此他Raft是CP的。

协议具体实现步骤

传递时必要数据:

1.voteFor:投票给了谁

2.Current Term:当前的任期

3.logs[]日志entry,以及每个Entry内部的指令、任期、序号ID

4.蓝色箭头:已经commit的指针

5.黄色箭头:同步到的Entry进度

除此之外,leader还要维护matchindex[] 表示提交指针 和 nextIndex[] 表示同步指针

leader选举细节:

term:当前任期

candidateId:投票的候选人ID

lastLogIndex:候选人的最后日志Entry索引

last logo term:候选人最后日志目录的任期号

前两个参数是必须的。后两个参数主要是当主从发⽣切换时,可以⽤来找出最新的Candidate(候选人)。

Controller(主从切换的高可用集群)

controller只负责主从切换;同步数据是原来主从结构的(sycn和async方式)

为什么用它:解耦,性能高 。  缺点:不能保证强一致性。

部署官网: https://rocketmq.apache.org/zh/docs/deploymentOperations/03autofailover

Broker Container容器机制:

5.x版本中提供了新的模式BrokerContainer,一个BrokerContainer进程可以放多个Broker,这些broker可以是Master Broker、Slave Broker、DledgerBroker从而提高整体性能

proxy

这个组件也和Controller类似,可以和Broker⼀起组合部署,也可以单独部署。其作⽤主要是兼容
多语⾔客户端
官网地址https://rocketmq.apache.org/zh/docs/quickStart/01quickstart

http://www.dtcms.com/a/284627.html

相关文章:

  • reids依赖删除,但springboot仍然需要redis参数才能启动
  • 黄仁勋链博会首秀:中国开源AI催化全球革命,机器人浪潮重塑未来工厂
  • HCIE - 云计算拿下后的职业选择如何规划?
  • HCIE - 云计算方向考什么?一文全解
  • JMeter 性能测试工具
  • 推荐较好的zynq开发博客
  • 算法竞赛备赛——【图论】求最短路径——Floyd算法
  • Redis 中的看门狗机制:分布式锁的守护者
  • 力扣每日一题--2025.7.17
  • Python基础③-函数篇
  • 【git 如何查看本地分支与远程分支之间的差异】
  • Solr7升级Solr8全攻略:从Core重命名到IK分词兼容,零业务中断实战指南
  • GLM(General Language Model,通用语言模型)
  • CCLink IE转ModbusTCP网关配置无纸记录器(中篇)
  • Python应用进阶DAY7--面向对象编程基本特性和super函数
  • 2025解锁“分身术”???
  • 微信小程序151~160
  • 针对教育行业的网络安全方案有哪些
  • 手机兼容测试服务提供商对比分析:如何选择最合适的测试平台
  • 输尿管下段积水预测与手术决策支持技术方案
  • 订货系统多角色支持核心实战指南
  • LLMFactory导出的Merge模型导入ollama
  • 从平面到时空:地图故事的时空叙事与沉浸式阅读
  • 征程 6 UCP 任务优先级 抢占简介与实操
  • Qt5 与 Qt6 详细对比
  • .NET 8.0 使用 WebSocket
  • 24、鸿蒙Harmony Next开发:不依赖UI组件的全局自定义弹出框 (openCustomDialog)
  • 趋势分析:从数据波动中读懂产品的 “健康信号”
  • 使用 docker 安装 openldap
  • JMeter在Linux命令行模式下执行的核心参数及使用场景,结合官方文档与实战经验整理,便于快速查阅