RocketMq 重要知识点

如何存储队列位置信息

       实际运行系统,难免会遇到重新消费某条消息,跳过一段时间内的消息等情况。这些异常情况的处理都和offset有关。本节主要分析存储位置以及如何根据需要调整offset的值。

      首先先来明确一下offset的含义,rocketmq中一种类型的消息会放到一个Topic里,为了能够并行,一般一个Topic会有多个message queue,offset是某个Topic下的一条消息在某个message queue里的位置,通过offset 的值可以定位到这条消息或者指示Consume从这条消息开始向后继续处理。

      如下是offset的类结构,主要分为本地文件类型和broker代存类型两种。对于DefaultMQPushConsume 来说,默认是集群模式,也就是同一个消费者组里的多个消费者每个人消费一部分,各自收到的消息内容就不一样,这种情况下,由broker端存储和控制offset的值,使用RomoteBrokerOffsetStore  结构。

备注:(Diagrams可以展示父类,实现类可以用实现implemention或者光标移到该类上右击Browse Type Hierarchy)

RocketMq 重要知识点

     在广播模式下,每个消费者都收到这个topic的全部消息,各个消费者之间互不干扰,rocketmq使用LocalFileOffsetStore,把offset存到本地,offsetStroe  使用json格式存储,简单明了