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

RocketMQ中消息消费进度的查询逻辑是什么?

RocketMQ中消息消费进度的查询逻辑是什么?

展开
收起
vncamyi27xznk 2021-11-27 18:36:31 643 0
1 条回答
写回答
取消 提交回答
  • 集群模式的消息进度存储管理器实现为:RemoteBrokerOffsetStore,最终 Broker 端的命令处理类为:ConsumerManageProcessor。 image.png

    代码@1:从消费消息进度文件中查询消息消费进度。代码@2:如果消息消费进度文件中存储该队列的消息进度,其返回的 offset 必然会大于等于 0,则直接返回该偏移量该客户端,客户端从该偏移量开始消费。 代码@3:如果未从消息消费进度文件中查询到其进度,offset 为-1。则首先获取该主题、消息队列当前在 Broker 服务器中的最小偏移量(@4)。如果小于等于 0(返回 0 则表示该队列的文件还未曾删除过)并且其最小偏移量对应的消息存储在内存中而不是存在磁盘中,则返回偏移量 0,这就意味着 ConsumeFromWhere 中定义的三种枚举类型都不会生效,直接从 0 开始消费,到这里就能解开其谜团了(@5)。 代码@6:如果偏移量小于等于 0,但其消息已经存储在磁盘中,此时返回未找到,最终 RebalancePushImpl#computePullFromWhere 中得到的偏移量为-1。

    答复内容摘自《Apache RocketMQ 从入门到实战》,这本电子书收录开发者藏经阁 下载连接:https://developer.aliyun.com/topic/download?id=1139

    2021-11-27 20:53:56
    赞同 展开评论 打赏

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

相关产品

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

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载