MQ 重复消费的问题产生原因是什么,有没有解决方案

参考答案

产生MQ重复消费的问题的原因

  • 首先,假如生产者生产数据,生产的数据都有一个offset标号,代表这个数据消费的顺序的序号;
  • 例如生产者生产了三条消息152,153,154,这时发送到MQ;
  • MQ按照顺序将数据提交到消费者;
  • 消费者是定时将消费的数据记录提交到Zookeeper zk中,把记录了现在消费到第几条数据告诉MQ;
  • 如果此时消费了152,153消费者重启了,那么记录没提交到zk,此时MQ以为消费者才消费到151,还会重新提交152,153;
  • 此时数据就出现了重复的问题,数据库就出现了脏数据。

如何解决mq的重复消费问题

  • 重复消费的问题会导致数据库出现脏数据,我们一般通过保证幂等性来解决这个问题。
  • 幂等性:是指一次和多次请求某一个资源对于资源本身应该具有同样的结果。
  • 保证生产者重复消费数据保证幂等性,有多种方式实现。最简单的在插入数据库的数据加个唯一健,这样插入相同的数据时只会报错,不会出现脏数据。
  • 在Redis中存个id,每次操作数据之前查下id是否存在。
  • 如果存在,就不做处理;如果不存在,就操作数据库。解决掉幂等性的问题。

 

以上,是MQ面试题【如何保证消息不被重复消费】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧