Skip to content
章节导航

源码解读 RocketMQ 消息偏移量 Offset

什么是offset

  • message queue 是无限长的数组,—条消息进来下标就会涨 1,下标就是offset,消息在某个 MessageQueue 里的位置,通过 offset 的值可以定位到这条消息,或者指示 Consumer 从这条 消息开始向后处理
  • message queue 中的 maxOffset 表示消息的最大 offset, maxOffset 并不是最新的那条消息的 offset,而是最新消息的 offset+1, minOffse t则是现存在的最小 offset。 fileReserveTime=48 默认消息存储 48 小时后,消费会被物理地从磁盘删除, message queue 的 min offset 也就对应增长。所以比 minOffset 还要小的那些消息已经不在 broker 上了,就无法 被消费

类型(父类是OffsetStore)

本地文件类型

DefaultMQPushConsumer 的 BROADCASTING 模式,各个 Consumer 没有互相干扰,使用 LoclaFileOffsetStore,把Offset存储在本地

Broker代存储类型

DefaultMQPushConsumer 的 CLUSTERING 模式,由 Broker 端存储和控制 Offset 的值, 使用 RemoteBrokerOffsetStore

阅读源码的正确姿势

先有思路,明白大体流程,再看接口,再看实现类

有什么用

  • 主要是记录消息的偏移量,有多个消费者进行消费
  • 集群模式下采用 RemoteBrokerOffsetStore, broker 控制 offset 的值
  • 广播模式下采用 LocalFileOffsetStore, 消费端存储

建议

建议采用 pushConsumer, RocketMQ 自动维护 OffsetStore,如果用另外—种 pullConsumer 需要自 己进行维护 OffsetStore