-1

在此处输入图像描述

我更改了我的消费组并开始消费,它默认从最后一个偏移量消费,这是正确的。

但是当我重新启动这个消费者时,它会使用历史消息,为什么它在第一次启动时不使用历史消息,而是第二次使用。

以及经纪人的抵消从3000到4000。

4

1 回答 1

1

CONSUME_FROM_LAST_OFFSET只对一个全新的消费组生效。

因此,对于您的第一次重新启动,您更改您的消费组(例如从 CG-A 到 CG-B),使其成为全新的消费组,然后它将按照您的预期从最后一个偏移量开始消费。

对于您的第二次尝试,在长时间离线后,您使用相同的消费 grop GC-B 重新启动您的实例,rocketmq 将从已记住的偏移代理消费,这实际上是按设计工作的。

因此,对于您想要跳过历史消息但仅从最后一个偏移量消费的场景,您可以

  1. 将您的消费组更改为全新的CONSUME_FROM_LAST_OFFSET
  2. 继续使用您的消费组,但在重新启动您的实例之前将消费组的消费偏移量重置为最新的偏移量。

笔记

如果您使用的是广播消费者,其偏移量存储在本地文件中(与实例名称相关的文件路径)而不是代理,请指定您的实例名称

consumer.setInstanceName("YOUR_INSTANCE_NAME");

. 否则,每次重新启动时,实例名称都会更改(默认为进程 ID),因此消费者无法归档,因此每次重新启动时它可能会从最后一个偏移量消耗。

于 2017-06-12T05:13:42.183 回答