重置消费位点是指改变订阅者当前的消费位置。当消费者出现故障或者消费错误数据时,您可通过重置消费位点将消费位置回滚到之前的某个位点,重新开始消费。您也可以将消费位置移动至最新位点,暂时不处理堆积的消息。
背景信息
云消息队列 RocketMQ 版通过消费位点管理消息的消费进度。每条消息被某个消费者消费完成后不会立即在队列中删除,云消息队列 RocketMQ 版会基于每个Group维护一份消费记录,该记录指定了Group下的消费者消费指定Topic时,消费过的最新一条消息的位点,即消费位点。
当消费者客户端离线又再次重新上线时,会严格按照服务端保存的消费进度继续处理消息。
当消费出现异常或者当前消费位点不符合您的预期时,您可以通过重置消费位点调整您的消费进度。
云消息队列 RocketMQ 版支持以下方式重置消费位点:
从最新位点开始消费
消费者消费指定Topic中的消息时,会跳过当前堆积(未被消费)的所有消息,从重置操作时间后发送的最新消息开始消费。
从指定时间点的位点开始消费
消费者将从重置时间对应的消费位点之后的消息进行消费,无论这些消息是否已被消费过。
指定时间的选择范围为目标Topic中储存的最早的和最晚的一条消息的生产时间。
重置到某一时刻对应的消费位点,匹配位点时,服务端会根据自动匹配到该时刻最接近的消费位点。
使用场景
消费堆积快速清理:当下游消费系统性能不足或消费速度小于生产速度时,会产生大量堆积消息。若这部分堆积消息可以丢弃,您可以通过重置消费位点快速将消费位点更新到指定位置,绕过这部分堆积的消息,减少下游处理压力。
业务回溯,纠正处理:由于业务消费逻辑出现异常,消息被错误处理。若您希望重新消费这些已被处理的消息,可以通过重置消费位点快速将消费位点更新到历史指定位置,实现消费回溯。
注意事项
重置消费位点的范围是重置指定Group对于目标Topic的消费位点,因此不会影响其他订阅了该Topic的Group的消费进度。
广播消费模式下不支持重置消费位点。
云消息队列 RocketMQ 版仅支持重置TCP协议的Group ID的消费位点,不支持重置HTTP协议的Group ID的消费位点。
重置消费位点功能只能重置对消费者可见的消息,不能重置定时中、重试等待中的消息。
重试消费位点只能在消费者在线时进行操作。
操作步骤
登录云消息队列 RocketMQ 版控制台,在左侧导航栏单击实例列表。
在顶部菜单栏选择地域,如华东1(杭州),然后在实例列表中,单击目标实例名称。
在左侧导航栏单击Group 管理,然后单击TCP 协议页签。
找到需要重置消费位点的Group ID,在其操作列单击更多,然后在下拉菜单中,选择重置消费位点。
在重置消费位点面板中,选择需要重置的目标Topic和重置方式,然后单击确定。
警告若选择从最新位点开始消费,则Group ID在指定Topic中的堆积消息将被全部清除,该操作大概2~3分钟后生效,请勿重复操作。期间应用所有的消费者将暂停消费2~3分钟,对延迟敏感的业务请谨慎使用。
从最新位点开始消费:若选择此项,该Group ID在消费指定Topic下的消息时会跳过当前堆积(未被消费)的所有消息,从最新消息开始消费。
从指定时间点的位点开始消费:选择此项后会出现时间选择控件。请指定一个时间点,消费者将从这个时间点之后发送的消息开始消费,不管之前的消息是否又被消费过。
在弹出的提示对话框,确认提示信息,然后单击确定。
消费位点重置常见问题
我使用两种方式重置消费位点均失败,该怎么处理?
请确认是否为集群消费。广播模式不支持重置消费位点。
确认当前消费者是否在线。消费者必须在线才能重置消费位点。
确认SDK版本,SDK版本过低也会导致此问题。建议升级SDK至最新版本,针对TCP Java SDK,至少是1.8.0.Final及以上版本。更多信息,请参见版本说明。
我重置消费位点跳过之前堆积的消息,为什么还有部分消息未被重置?
目前重置消息功能对重试中消息不生效,因此重置后仍然可能会有少量重试消息投递。
通过消费位点重置,最多能重新消费到多久以前的消息?
选择从指定时间点重置时,可以选择的最早时间为Topic中最早一条消息的存储时间,而云消息队列 RocketMQ 版4.x系列实例的最大消息存储时长为3天,超过3天的消息会从Topic中被删除。
因此,通过重置消费位点最多可重新消费到3天前的消息。
相关文档
除了控制台,云消息队列 RocketMQ 版还支持通过API接口重置消费位点。