开发者社区 > 云原生 > 正文

Apache RocketMQ中 doAppendInner追加请求如何理解?

Apache RocketMQ中 doAppendInner追加请求如何理解?

展开
收起
vncamyi27xznk 2021-11-20 20:14:25 403 0
1 条回答
写回答
取消 提交回答
  • image.png

    代码@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

    2021-11-21 13:45:27
    赞同 展开评论 打赏

阿里云拥有国内全面的云原生产品技术以及大规模的云原生应用实践,通过全面容器化、核心技术互联网化、应用 Serverless 化三大范式,助力制造业企业高效上云,实现系统稳定、应用敏捷智能。拥抱云原生,让创新无处不在。

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    Apache Flink技术进阶 立即下载
    Apache Spark: Cloud and On-Prem 立即下载
    Hybrid Cloud and Apache Spark 立即下载

    相关镜像