咨询下,rocketmq 重置消费位点过程中,有可能导致重复消费吗?[阿里云消息队列MQ]

咨询下,rocketmq 重置消费位点过程中,有可能导致重复消费吗?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
4 条回复 A 作者 M 管理员
    • 在 RocketMQ 中,如果消费者使用的是拉消息模式,重置消费位点的过程中是有可能导致重复消费的。消费者在拉取消息时,会从服务器中指定的消息消费位点开始拉取消息,然后逐个消费这些消息。如果在消费某条消息时出现异常,消费者有可能把当前消费的消息消费掉后,才抛出异常。此时,RocketMQ 会认为该条消息已经消费成功,将消费进度推进到下一条消息上。如果此时消费者重置了消费位点,会重新开始消费之前已经消费成功的消息,从而导致消息重复消费的情况。

    • 为了避免重复消费,建议使用推送消息模式,或者在拉取消息时使用消费消息的确认机制(ACK),确保消息已经被消费成功后再进行推进消费位点,以避免因为消费异常而导致的消息重复消费。同时,在重置消费位点时,也可以通过使用幂等消费的方式,保证消息消费的幂等性,从而避免消息重复消费的出现。

  1. 楼主你好,MQ重复消费是指同一个应用的多个实例收到相同的消息,或者同一个实例收到多次相同的消息,若消费者逻辑未做幂等处理,就会造成重复消费。

  2. MQ会把你的这批消费放到当前消费组的重试队列中,然后过一段时间重试队列中的消息会再次发送给消费者

  3. 重置消费位点后消费者将直接从重置后的位点开始消费,重置后的历史消息需要重新读写,造成重复消费

  4. 向前重置位点的话,这段时间的消息就会被重复消费。此答案整理自钉群“群2-Apache RocketMQ 中国”