RocketMQ消息重复消费(同一条消息2毫秒内分别在两台机器上被消费)-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

RocketMQ消息重复消费(同一条消息2毫秒内分别在两台机器上被消费)

幸福鳥 2018-09-03 17:41:22 11020

生产者:
2018-09-03 10:31:10.307 8182147902 [pool-2-thread-4] [INFO ] c.c.g.*.utils.RocketProducerUtil - RocketMq返回状态:SEND_OK,MQMsgId:0A3ABDAC00002A9E0000001D77B3EDE1,msgId:b338350ca72344428eae18c5040f412a

消费者:经查日志显示:
IP --> ..174.16,消费时间:2018-09-03 10:31:10.307 5102948121
IP --> ..174.15,消费时间:2018-09-03 10:31:10.308 5702882940

两个消费者,分别是不同的IP,在相差1毫秒的情况下分别消费一次,共消费2次。即使消费端做幂等处理,对于分布式系统来说,做数据同步也可能会存在延迟会,可能会导致幂等失效。

请问:两台服务器上的消费者,在相差1毫秒的情况下,分别消费两次,这样的现象正常吗?

消息中间件 RocketMQ
分享到
取消 提交回答
全部回答(4)
  • hill007300
    2020-03-12 19:41:05

    有可能,如果出现网络波动,重新负载均衡,会出现多台机器在某个时间窗口拿到同一个队列。

    0 0
  • 游客p56i5qm43o4aa
    2019-10-21 04:37:32

    我也遇到了同样的问题,折腾了好久。我的问题是因为给所有消费者(consumer)设置了相同的instanceName导致消息被ConsumerGroup中的每个Consumer都消费一次。 解决方案:去除consumer的instanceName设置。 //consumer.setInstanceName(); 本地环境测试后可以正常消费消息了。

    但使用Docker部署项目后,发现又再次出现重复消费问题。经过一番查询后,发现不设置instanceName时,rocketmq会使用ip@pid作为instanceName(pid代表jvm名字)。又再次导致instanceName相同。 解决方案:设置consumer的instanceName,给一个UUID使instanceName不相同,解决。 consumer.setInstanceName(UUID);

    0 0
  • jonnxu
    2019-07-17 23:03:25

    我也遇到这个问题,不知道楼主有没有找出原因,我这边现象是同一个进程内部不同处理线程同时收到同一条消息,rocketmq日志会有如下这条日志:Note: accumulation consume occurs on mq:*,系统以前很少出现,但是昨天复位业务进程之后频繁出现,目前还没有分析出来为什么有这个问题

    0 0
  • 痞子姜
    2019-07-17 23:03:25

    RocketMQ不解决消息重复推送问题。解决的话一是在客户端做幂等性处理,二是消息有唯一编号,消费完的消息,存到消息表里,这样做去重。第二种对消息系统的吞吐量有巨大的需求,能用客户端去解决的话,最好用客户端的幂等性

    0 0
添加回答
微服务
使用钉钉扫一扫加入圈子
+ 订阅

构建可靠、高效、易扩展的技术基石

推荐文章
相似问题