Skip to content

concept

1. 最小位点(Min Offset)

  • 定义:最小位点是指消息队列中当前还保留的最早消息的偏移量(offset)。
  • 作用:RocketMQ 会定期清理过期或者被消费确认的消息,清理后最早还保留的消息的偏移量即为最小位点。
  • 意义
    • 消费者不能再消费小于该最小位点的消息,因为这些消息已经被删除。
    • 可以理解为队列中最“旧”的消息的起点。

2. 最大位点(Max Offset)

  • 定义:最大位点是消息队列当前写入的最新消息的偏移量。
  • 作用:表示当前消息队列中最新消息的位置。
  • 意义
    • 消费者消费的消息偏移量一般在最小位点和最大位点之间。
    • 最大位点通常是下一条将要写入消息的偏移量,也就是队尾的偏移量。

总结

概念解释作用与意义
最小位点队列中最早保留消息的偏移量消息清理后的起点,消费不可再访问之前的消息
最大位点队列中最新写入消息的偏移量表示消息队列的最新位置,消费终点

1. 代理者位点(Broker Offset)

  • 定义:代理者位点指的是消息存储服务器(Broker)端当前消息队列的最大偏移量,也就是消息队列中最新写入消息的位置。
  • 作用
    • 代表 Broker 已经存储的消息的最新位置。
    • 当生产者发送消息到Broker时,Broker会将消息追加到消息队列的末尾,代理者位点随之更新。
  • 特点
    • 这个位点反映的是消息生产端的进度,是消息存储的“终点”。
    • 消费者的消费进度不能超过代理者位点。

2. 消费者位点(Consumer Offset)

  • 定义:消费者位点指的是消费者组(Consumer Group)当前消费到的消息偏移量,表示消费者已经消费确认的最后一条消息的位置。
  • 作用
    • 标识消费者消费进度,消费者从该偏移量之后的位置开始消费下一条消息。
    • 方便消费者重启或者断线重连后,从上次的消费位点继续消费,保证消息不丢失也不重复消费。
  • 特点
    • 消费者位点是存储在Broker或者专门的消费进度存储中(如NameServer或专门的Offset存储机制)。
    • 不同消费者组有独立的消费位点。

二者的关系

  • 代理者位点表示的是消息队列生产端最新消息的位置,是消息存储的边界。
  • 消费者位点表示的是某个消费者组消费的进度,是消费端的进度标记。
  • 消费者位点一定不会超过代理者位点(否则消费者消费到了不存在的消息)。

举例说明

假设某条消息队列:

  • Broker 当前最新消息偏移量(代理者位点)是 1000,表示已经存储了 0~999 条消息。
  • 某个消费者组的消费进度(消费者位点)是 950,表示已经消费了 0~949 条消息,下一条消费的是偏移量 950 的消息。