通过消费组A开始消费队列中的消息,消费到中途时由于故障导致已消费的消息在客户端未保存,所以需要重新再消费一遍,但是由于Kafka内部机制的原因已消费成功的消息无法再次消费,可怎办呢?
终于在帮助中找到如下内容,可以解决我的问题:
如果想跳过某些未消费的消息,或者想重新消费队列中的已消费的消息,或者只想消费某个时间点之后的消息(这些消息不论之前是否消费过),那么可以通过“消费重置”功能实现选择性跳过或者重新消费。
消费重置支持以下三种场景:
- 消费位置重置到最前: 重新消费队列中的所有的消息,不论之前是否已消费过。
- 消费位置重置到最后: 跳过队列中当前所有的消息,只消费“重置”之后新生产的消息。
- 自定义重置位置: 只消费队列中某一时间点之后的消息。 说明:
如果执行了消费重置,则重置位置之前的消息都变成已消费消息数,不管重置之前是否已消费。
操作步骤
- 登录管理控制台。
- 在管理控制台左上角单击图标,选择区域。
- 单击页面上方的“服务列表”,选择“应用服务 > 分布式消息服务”,进入分布式消息服务信息页面。
- 单击左侧菜单栏的“队列管理”,进入“队列管理”页面。
- 单击指定队列的名称,显示队列详情。
- 选择“消费组”,显示消费组列表。
- 单击消费组后的“更多”,选择“消费重置”,进入“消费重置”页面。
- 选择“重置位置”、是否强制重置,单击“确定”,执行重置消费位置。 表1 消费消息参数说明
参数 | 说明 |
重置位置 |
默认为从队列头端消费消息。 |
自定义时间 | 当重置位置选择“自定义时间消费消息”时,需要设置自定义时间,并且只能选择72小时范围内的时间。 |
强制重置 | 关闭:重置时如果消费组正在消费消息,则重置会失败。 打开:强制进行消费重置,如果消费组正在消费消息,则可能会消费失败。 默认为关闭。 |