通过消费组A开始消费队列中的消息,消费到中途时由于故障导致已消费的消息在客户端未保存,所以需要重新再消费一遍,但是由于Kafka内部机制的原因已消费成功的消息无法再次消费,可怎办呢?

终于在帮助中找到如下内容,可以解决我的问题:

如果想跳过某些未消费的消息,或者想重新消费队列中的已消费的消息,或者只想消费某个时间点之后的消息(这些消息不论之前是否消费过),那么可以通过“消费重置”功能实现选择性跳过或者重新消费。

消费重置支持以下三种场景:

  • 消费位置重置到最前: 重新消费队列中的所有的消息,不论之前是否已消费过。
  • 消费位置重置到最后: 跳过队列中当前所有的消息,只消费“重置”之后新生产的消息。
  • 自定义重置位置: 只消费队列中某一时间点之后的消息。 说明:

如果执行了消费重置,则重置位置之前的消息都变成已消费消息数,不管重置之前是否已消费。

 

操作步骤

 

  1. 登录管理控制台
  2. 在管理控制台左上角单击图标,选择区域。
  3. 单击页面上方的“服务列表”,选择“应用服务 > 分布式消息服务”,进入分布式消息服务信息页面。
  4. 单击左侧菜单栏的“队列管理”,进入“队列管理”页面。
  5. 单击指定队列的名称,显示队列详情。
  6. 选择“消费组”,显示消费组列表。
  7. 单击消费组后的“更多”,选择“消费重置”,进入“消费重置”页面。
  8. 选择“重置位置”、是否强制重置,单击“确定”,执行重置消费位置。 表1 消费消息参数说明

参数

说明

重置位置

  • 从队列头端消费消息:重置成功后,该消费组从队列的最头端开始消费。
  • 自定义时间消费消息:重置成功后,该消费组只能消费重置时间点之后的消息。
  • 从队列尾端消费消息:重置成功后,该消费组只能消费队列中新生产的消息。

默认为从队列头端消费消息。

自定义时间

当重置位置选择“自定义时间消费消息”时,需要设置自定义时间,并且只能选择72小时范围内的时间。

强制重置

关闭:重置时如果消费组正在消费消息,则重置会失败。

打开:强制进行消费重置,如果消费组正在消费消息,则可能会消费失败。

默认为关闭。