Apache RocketMQ中 doAppendInner追加请求如何理解?
代码@1:首先根据序号查询出日志。 代码@2:检测配额,如果超过配额,会进行一定的限流,其关键实现点: 首先触发条件:append 挂起请求数已超过最大允许挂起数;基于文件存储并主从差异超过 300m,可通过 peerPushThrottlePoint 配置。 每秒追加的日志超过 20m(可通过 peerPushQuota 配置),则会 sleep 1s 中后再追加。 代码@3:构建 PUSH 请求日志。 代码@4:通过 Netty 发送网络请求到从节点,从节点收到请求会进行处理(本文并不会探讨与网络相关的实现细节)。 代码@5:用 pendingMap 记录待追加的日志的发送时间,用于发送端判断是否超时的一个依据。 代码@6:请求成功的处理逻辑,其关键实现点如下: 移除 pendingMap 中的关于该日志的发送超时时间。 更新已成功追加的日志序号(按投票轮次组织,并且每个从服务器一个键值对)。 唤醒 quorumAckChecker 线程(主要用于仲裁 append 结果),后续会详细介绍。 代码@7:Push 请求出现状态不一致情况,将发送 COMPARE 请求,来对比主从节点的数据是否一致。 答复内容摘自《Apache RocketMQ 源码解析》,这本电子书收录开发者藏经阁 下载连接:https://developer.aliyun.com/topic/download?id=1140
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。