因为RocketMQ的消息存储在Broker中的CommitLog中,由索引文件ConsumerQueue来查询消息,ConsumerQueue中用来定位消息的就是CommitLog的Offset,所以消费者或者Broker通过管理Offset来管理消费进度。

消费模式

  • 广播消费

    
    ConsumerGroup中的所有Consumer都可以消费Topic的所有消息,各自的消费进度没有交集,所以offset是consumer本地管理
    
  • 集群消费

    
    ConsumerGroup中的所有Consumer互斥消费Topic的消息,即一个消息只能被一个Consumer消费,ConsumerGroup下所有Consumer共同维护一个消费进度,所以offset是在Broker端远程管理
    
    

Offset的提交方式

在集群消费模式下,Consumer向Broker提交offset的方式有两种:

  • 同步提交

    • Consumer处理完消息后会向Broker提交offset,然后等待Broker的成功响应,在超时时间内获取到响应则进行下一批消息获取,否则重新提交offset,直到获取响应,这个过程中Consumer是阻塞的
  • 异步提交

    • Consumer处理完消息后会向Broker提交offset,不等待Broker响应,直接获取下一批消息,提高了消费者的吞吐量,但是一旦Broker宕机了,offset没有持久化,当Broker重启后就会重复消费

标签: none

添加新评论