在消息传递过程中,如果出现传递失败的情况,发送会执行重试,重试可能会产生重复的消息。对系统来说,如果没有对重复消费进行处理,会导致系统数据发生错误。 比如,一个订单系统,订单创建成功后,把数据写入统计数据库,如果发生重复统计,会导致数据库数据错误。 解决消息重复消费,其实就是保证消息 ...
什么是幂等 任意多次执行所产生的影响均与一次执行的影响相同就可以称为幂等 什么是消息幂等 当出现消费者对某条消息重复消费的情况时,重复消费的结果与消费一次的结果是相同的,并且多次消费并未对业务系统产生任何负面影响 为什么我们要保证幂等性,不保证幂等性,会不会有问题 这个问题其实没法准确回答。回答这个问题的根源得从业务场景上进行分析。比如正常业务情况下,我们是不允许同个订单重复支付,这种业务场景我们 ...
2020-08-09 18:41 1 1315 推荐指数:
在消息传递过程中,如果出现传递失败的情况,发送会执行重试,重试可能会产生重复的消息。对系统来说,如果没有对重复消费进行处理,会导致系统数据发生错误。 比如,一个订单系统,订单创建成功后,把数据写入统计数据库,如果发生重复统计,会导致数据库数据错误。 解决消息重复消费,其实就是保证消息 ...
1、面试官心里分析 其实这个很常见的一个问题,这俩问题基本可以连起来问。既然是消费消息,那肯定要考虑考虑会不会重复消费?能不能避免重复消费?或者重复消费了也别造成系统异常可以吗?这个是MQ领域的基本问题,其实本质上还是问你使用消息队列如何保证幂等性,这个是你架构里要考虑的一个问题。面试官问你 ...
面试官心理剖析: 主要是看你对消息队列数据重复消费的问题,是否有了解,是否知道怎么解决?如果这块不知道,那么面试官会觉得如果交给你做功能,可能会出现多次消费的情况。 回答: 为什么会出现重复消费? 分析: 如图,在什么场景会出现消息重复消费?比如说消费端已经消费了 offset ...
比如你拿个数据要写库,你先根据主键查一下,如果这数据都有了,你就别插入了,update 一下好吧。(高并发会有问题) 比如你是写 Redis,那没问题了,反正每次都是 set,天然幂等性。 比如你不是上面两个场景,那做的稍微复杂一点,你需要让生产者发送每条数据的时候,里面加一个全局唯一的 id ...
昨天业务反馈了一个问题,一个用户的月流水账单重复了,拿到userid,开始定位问题之路。 查看数据库记录,如下图,用户月流水数据确实重复了(taskid同一个批次,每个月数据都有二条)。 1. 首先,看外部数据供应商是否重复推送业务数据给我,我程序中是会设置拦截重复消息 2. 查看 ...
消息重复消费,会造成数据混乱,特别是在涉及消费和财务系统里,此问题的解决显得尤为重要。 以kafka为例 关键字:消费端自动提交offset;写库或者redis时,先去查一下主键、key等是否存在 上图中,最顶上的文本框丢失的文字:并通知kafka当前最大offset; 最右边的文本框 ...
重复消费可能会在什么场景下出现(以kafka为例) kafka实际上有个offset的概念,就是每个消息写进去,都有一个offset,代表他的序号, 然后consumer消费了数据之后,每隔一段时间,会把自己消费过的消息的offset提交一下,代表我已经消费过了,下次 ...
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 MQ系列4:NameServer 原理解析 MQ系列5:RocketMQ消息的发送模式 MQ系列6:消息的消费 MQ系列7:消息通信,追求极致性能 MQ系列8:数据存储,消息队列的高可用保障 ...