国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

RocketMQ中各類重復消費的原理淺析

大數據
本文將通過RocketMQ作為例子,來扒一扒什么情況下會導致重復消費。

Labs 導讀

隨著大數據和云計算時代的到來,我國的各個產業每天都在產生不可估計的數據,以及對數據的各式各樣的需求,消息中間件在處理數據、消費數據的過程中越來越受到重視。在高并發、微服務、分布式的場景下,如何合理地利用消息中間件,如何保證MQ消費消息的冪等性?所謂知其然,才能知其所以然。

Part 01、 RocketMQ如何生產和消費消息 

先簡單介紹下RocketMQ正常生產消息和消費消息的流程,如下圖。

1.生產者在發送消息之前根據負載均衡策略(默認是輪詢)選擇一個Queue,然后跟這個Queue所在的機器建立連接,把消息發送到這個Queue上。

2.消費者消費這個Queue,就能獲取到對應的消息。

圖片圖片

- 問題出現

當異常情況出現時,如消息發送超時或者消息消費超時,RocketMQ為保證消息發送成功,會啟動重試機制,選擇另一臺機器的Queue重發。現在假設有這樣一種情況,消費者實際正確接收到了消息,只是由于網絡波動導致響應超時了,那就會出現消息重復發送,導致消費者重復消費的情況出現。

那除此之外,還有沒有其他情況會導致消息重復消費的情況呢?總結起來一共有如下幾種情況。

1)消息發送異常時的重復消費

2)消費消息時拋出了異常

3)消費者提交offset失敗

4)Broker持久化offset失敗

5)主從同步失敗

6)重平衡

7)清理長時間消費的消息

Part 02、  淺析各類情況  

- 消費消息時拋出異常

  • 問題分析一

RocketMQ在并發消費的模式下會調用MessageListenerConcurrently的consumeMessage方法,入參是msgs集合。當調用該方法消費消息出現異常時,返回的結果status就會是null。這種情況下會導致status被設置為RECONSUME_LATER,也就是說消息之后會被重復消費。

  • 問題分析二

傳入的是msgs集合。上述原因一中消息處理之后,不管成功失敗,都會對結果進行處理。而集合中的任意一個失敗,都會導致status被設置為RECONSUME_LATER。在對結果處理是,判斷到RECONSUME_LATER時,就會對msgs重新遍歷并發送消息,重新消費,從而導致之前成功處理的消息都會被重復消費。不過好在msgs消息的數量默認情況下是1。

圖片圖片

- 消費者提交offset失敗

  • 何為offset

producer發送消息到broker,Rocketmq會將消息的內容持久化到commitLog文件中,再分發到topic下的消費隊列consume Queue,消費者提交消費請求時,broker從該consumer負責的消費隊列中根據請求參數傳入的起始offset來獲取需要消費的消息索引信息,再從commitLog中獲取具體的消息內容返回給consumer。消費成功之后,消費者提交offset,來記錄這個queue消費到哪個位置了。

  • 問題分析

RocketMq設計的時候,消費完消息,并不是同步提交offset,而是將offset保存到內存中,通過一個定時任務(默認是5S一次),以網絡請求的方式將offset提交給broker。如果最新的offset還沒提交,此時服務器宕機了,那么重啟之后,就會從broker中讀取到之前的提交的offset,并從此處開始消費,此時就會出現重復消費的情況了。

圖片圖片

- broker持久化offset失敗

  • 問題分析

與消費者提交offset同理,Broker為了防止數據丟失,會將offset持久化到磁盤中。同樣的也是通過一個默認5S的定時任務來處理持久化操作。所以offset的完整過程就如下圖。當broker宕機時,就會導致offset丟失,此時如果消費者重新拉取消費進度,就會比實際消費的進度要低,導致重復消費。

圖片圖片

- 主從同步失敗

  • 問題分析

為保證RocketMQ服務的高可用,一般項目中都會啟用主從備份的模式,當主節點掛掉之后,從節點就會升級為主節點對外提供服務。因此就需要進行主從同步,保證數據的一致性。默認情況下每隔10S,從節點會向主節點請求,同步元數據,包括消費進度。此時如果主節點宕機了,從節點就無法獲取到10S之內的消費進度,自然也就會導致重復消費。

圖片圖片

- 重平衡

  • 何為重平衡

RocketMQ的消費者有兩種模式,集群消費模式和廣播消費模式,絕大多數場景采用的都是集群消費模式。前面提到的消費進度就是在集群消費模式下才會存在。集群消費模式中有一個消費組的概念。一個消費組可以有多個消費者,不同消費組之間消費消息互不干擾,而同一消費組的消費者按照一定的算法分配消息隊列進行消息消費,保證一個消息只能被一個消費組消費一次。當消費組中的消費組增加或者減少時就會觸發重平衡。如圖,原先消費組中有兩個消費者,平均消費4個隊列,每個消費組2個隊列;當加入了一個新的消費者時,為了保證新的消費者能夠消費消息,就會進行重平衡,重新分配消息隊列。

圖片圖片

  • 問題分析

假設在重平衡發生時,此時消費者2還在正常消費Queue4,當消費者3加入,重平衡完成時,此時消費者2判斷到Queue4已經不屬于自己消費了,就會將Queue4設置為dropped,消費完成時,發現隊列是dropped狀態,那么消費者2的消費進度offset就不會被提交。成功消費了消息,但是消費進度卻沒有被提交,于是當消費者3開始消費消息時,就會從服務端拉取到之前的消費進度,造成隊列4的消息被重復消費。

- 清理長時間消費的消息

  • 清理機制講解

RocketMQ中有一個機制會定時清理長時間正在消費的消息,默認是15分鐘執行一次清理任務。之所以這么做,是有原因的。我們說過,消息被消費之后,就會提交offset。當一個線程消費了所有消息時,就會把消息從集合中移除,提交的消息進度offset就是msg5的offset+1。

假設,現在是兩個線程消費,線程2消費完成,之后提交offset,但是此時線程1還在處理前兩條消息,因此為了保證消費消息的不丟失,移除之后發現集合中還有剩余消息,就會把msg1的offset 返回提交上去。而一旦集合最前面的消息長時間處理,就會導致這個消費進度一直在最前面。此時如果服務器重啟,就會導致很多消費過的消息都會被重復消費。因此引入了清理長時間消費的機制。

圖片圖片

  • 問題分析

引入清理長時間消費的消息機制后,一旦發現某個消息已經處理超過15分鐘了,就會將消息移除,保障后續消息消費進度的正常提交,之后會隔一定的時間再次消費這個被移除的消息。但是,這個消息雖然被移除了,卻并不是沒有消費過,因此再次消費就會導致重復消費的問題出現。

Part 03、  總結 

RocketMq的官方文檔中對消息傳遞有這樣的解釋:RocketMq確保所有消息至少被傳遞一次,在大多數情況下,消息不會重復。可見RocketMq為了保證消息的不丟失,犧牲了消息投遞的重復率。因此我們在使用RokcetMq時需要合理使用它的特點,設計合理的冪等技術方案來解決重復消費的問題。

責任編輯:龐桂玉 來源: 移動Labs
相關推薦

2015-08-26 11:23:58

2021-07-12 10:25:03

RocketMQ數據結構kafka

2024-05-23 12:11:39

2024-03-25 03:00:00

.NET 6await編程

2022-07-07 09:00:49

RocketMQ消費者消息消費

2017-05-24 09:43:42

2011-04-13 15:01:39

2020-08-05 08:21:41

Webpack

2023-05-16 08:31:09

BrokerReef版本

2023-09-26 08:01:46

消費者TopicRocketMQ

2023-03-20 22:48:25

RocketMQ源碼消息

2022-04-02 08:55:15

架構RocketMQSDK

2010-09-14 12:37:57

2023-02-12 23:23:30

2009-07-03 17:48:34

JSP頁面翻譯

2009-07-06 09:23:51

Servlet定義

2010-08-05 17:35:34

RIP路由協議

2020-11-05 11:14:29

Docker底層原理

2022-08-09 08:18:19

RocketMQpush消費

2023-05-11 07:25:57

ReduxMiddleware函數
點贊
收藏

51CTO技術棧公眾號

日韩一卡二卡三卡四卡| 亚洲色图欧美制服丝袜另类第一页| 免费在线国产精品| 成人羞羞网站入口免费| 色综合伊人色综合网| 成人免费一区二区三区牛牛| 日韩欧美亚洲成人| 日韩黄色动漫| 亚洲欧洲色图综合| 国产精品久久国产精品| 国产精品av久久久久久麻豆网| 久久天天躁狠狠躁夜夜av| 一区二区精品免费视频| a91a精品视频在线观看| 色与欲影视天天看综合网| 天堂久久午夜av| 国产欧美日韩卡一| 久久精品久久久| 日本高清不卡一区二区三| 国产成人久久精品麻豆二区| 午夜精品久久久久久久99热 | 91传媒在线免费观看| 麻豆成人免费电影| 婷婷五月色综合| 亚洲桃色综合影院| 亚洲国产精品人人做人人爽| 久久久人成影片一区二区三区观看 | 亚洲午夜久久久久久久久久久 | 日韩精品国产精品| 欧美国产日韩一区二区| 中文av资源在线| 久久伊人资源站| av综合网址| 欧美在线www| 日本精品在线视频| 久久麻豆视频| 洋洋av久久久久久久一区| 51成人做爰www免费看网站| 天堂中文在线播放| 国产偷v国产偷v亚洲高清| 久久久久久久97| 91高清在线| 国产一区二区三区综合| 精品久久久久久亚洲精品| 日韩资源在线| 亚洲欧美视频在线观看| 亚洲永久一区二区三区在线| 国内精品99| 97婷婷涩涩精品一区| 四虎成人av| 国产精品视频一区二区三区四| 欧美视频一区| 欧洲xxxxx| 欧美网站在线| 久久国产精品久久久久久久久久| 91成人高清| 欧美一级在线观看| 1区2区3区在线视频| 亚洲激情在线观看视频免费| av免费在线观| 欧美一区二区精品| 在线xxxx| 中文字幕av一区中文字幕天堂| 精品69视频一区二区三区| 另类视频在线观看| 日韩超碰人人爽人人做人人添| 欧美一区在线直播| 国产精品人人做人人爽| 精品99在线| 麻豆av一区二区| 久久一区二区三区四区| 国产区在线视频| 久久精品国产一区二区电影| 日韩久久综合| 久久99久久99精品蜜柚传媒| 黄色日韩在线| 欧美日韩国产成人| 亚洲无线观看| 久久久一本精品99久久精品66| 亚洲国产精品免费| 国产欧美精品一区aⅴ影院| 成人手机视频在线| 国产精品视频一区二区三区不卡| 天堂精品视频| 精品国产乱码久久久久久夜甘婷婷| 欧美日韩国产综合视频在线观看| 色噜噜狠狠狠综合欧洲色8| 欧美日韩福利电影| 久久精品天堂| 116美女写真午夜一级久久| 亚洲欧美国产日韩天堂区| 久久精品99久久无色码中文字幕| 亚洲成人一区二区三区| 亚洲va天堂va国产va久| 播放一区二区| 亚洲成a人v欧美综合天堂| 欧美黄色aaaa| 在线黄色网页| 亚洲成人午夜在线| 天天操综合520| 黄页网站在线观看视频| 亚洲国产视频一区二区| 丰满少妇一区| 日本成人性视频| 亚洲综合在线五月| 亚洲精品在线影院| 影音先锋欧美在线| 精品国产91乱高清在线观看| 一区二区三区四区在线观看国产日韩| 日本韩国在线视频| 91麻豆精品国产91久久久更新资源速度超快| 精品亚洲精品福利线在观看| 亚洲高清黄色| 在线无限看免费粉色视频| 新67194成人永久网站| 天天综合网天天综合色| 激情综合自拍| 成人h动漫免费观看网站| 欧洲精品一区二区三区久久| 国产香蕉97碰碰久久人人| 国产一区二区精品久久91| 超碰在线cao| 中文字幕一区二区三区5566| 日韩电影中文 亚洲精品乱码| 在线视频99| 色香阁99久久精品久久久| 一区二区三区中文| 99久久99久久综合| 福利一区三区| 欧美亚洲自拍偷拍| 夜夜嗨av一区二区三区中文字幕| 免费观看久久久4p| 欧美另类极限扩张| 亚洲欧美激情另类校园| 欧美日韩国产综合新一区| 精品一区二区三区四区五区 | 日本粉色视频在线观看| 久久国产精品99精品国产| 丁香亚洲综合激情啪啪综合| 五月婷婷开心综合| 青草青草久热精品视频在线网站| 欧美激情一区二区三区| 国产亚洲一区二区三区在线观看| 一本久久综合| 9色在线视频| 一区二区三区四区五区视频| 激情欧美一区二区三区在线观看| 牛牛电影国产一区二区| 色一情一乱一伦一区二区三区丨| 精品成人在线观看| 亚洲妇女屁股眼交7| 99精品视频免费观看视频| 亚洲欧美精品一区| 狠狠色丁香九九婷婷综合五月| 欧美亚洲天堂| 免费特级黄毛片| 欧美日韩国产综合新一区| 国产91在线观看| 欧美成人一区二免费视频软件| 金瓶狂野欧美性猛交xxxx| 中文天堂在线观看| 污色网站在线观看| 97人人香蕉| 欧美日韩成人免费| 国产视频在线一区二区| 欧美日韩一区国产| 午夜精品福利久久久| 91女神在线视频| 美女性感视频久久| 欧美国产先锋| 日本久久成人网| av网址在线| 成年人免费大片| 日本超碰在线观看| 亚洲美女久久精品| www亚洲天堂| 91高清免费视频| 噜噜噜在线观看播放视频| 国产精品久久久久久久久久久久| 国产精品自产拍在线观| 欧美多人乱p欧美4p久久| 欧美影院一区二区| 激情小说 在线视频| 久久精品一区二区不卡| 欧美激情二区| jizz国产| 蜜桃精品久久久久久久免费影院 | 国产伦一区二区三区| 色欧美激情视频在线| 免费毛片在线看片免费丝瓜视频| 欧美又粗又长又爽做受| 三级4级全黄60分钟| 97超碰人人澡| 成人免费观看www在线| 在线看的你懂得| 成a人v在线播放| 欧美片第一页| 欧美一级一片| 亚洲日本激情| av不卡一区二区三区|