源码解读 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
剑鸣秋朔