在消息傳遞過程中,如果出現傳遞失敗的情況,發送會執行重試,重試可能會產生重復的消息。對系統來說,如果沒有對重復消費進行處理,會導致系統數據發生錯誤。 比如,一個訂單系統,訂單創建成功后,把數據寫入統計數據庫,如果發生重復統計,會導致數據庫數據錯誤。 解決消息重復消費,其實就是保證消息 ...
什么是冪等 任意多次執行所產生的影響均與一次執行的影響相同就可以稱為冪等 什么是消息冪等 當出現消費者對某條消息重復消費的情況時,重復消費的結果與消費一次的結果是相同的,並且多次消費並未對業務系統產生任何負面影響 為什么我們要保證冪等性,不保證冪等性,會不會有問題 這個問題其實沒法准確回答。回答這個問題的根源得從業務場景上進行分析。比如正常業務情況下,我們是不允許同個訂單重復支付,這種業務場景我們 ...
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:數據存儲,消息隊列的高可用保障 ...