✅RocketMQ如果重复消费了,可能是什么原因导致的?

✅RocketMQ如果重复消费了,可能是什么原因导致的?

典型回答

RocketMQ重复消费,指的是同一个消息重复来了多次,那么通常的情况有很多,常见的有以下几个。

Consumer返回给Broker消费失败(常见)

不管是因为什么情况了,是真的消费失败了,还是出现了异常了,还是明明消费成功了,但是你错误的返回了失败等等情况,只要你给RocketMQ返回的是 RECONSUME_LATER ,那么消息就会重投,有重投就会有重复消费。

Consumer消费处理超时了(常见)

不只是返回失败的情况,如果消费方法执行时间过长,RocketMQ 可能判定消费者失联,也一样会重投消息。 那就和上面的情况一样了。

消息发重了(常见)

这种比较常见的,因为有的时候我们调用MQ发送消息的时候,因为网络抖动或者异常,我们会把一些实际成功的消息重发一遍,那么就会有两条一模一样的消息,那么对于消费者来说就可能会重复消费了。

广播模式

这不是重复消费,而是 RocketMQ 的广播模式特性,他就是会把一条消息发送给所有的消费者,但是如果大家处理的逻辑都一样, 那么和重复消费的表现是一样的。

重平衡(kafka)

✅RocketMQ和Kafka一样有重平衡的问题吗?

Kafka 在消费者组 rebalance 时,新消费者加入/失败、分区重新分配,如果 offset 没及时提交,重新分配分区时会从老的 offset 重新开始消费。那么就会重复消费。

扩展知识

如何保证消息幂等

✅如何解决消息重复消费、重复下单等问题?