精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

RocketMQ如何保證消息的可靠性?

開發 開發工具
消息的發送方式有哪幾種?存儲消息的可靠性面臨哪些挑戰?消費消息的確認機制是怎樣的?本文通過分析消息流轉的整個過程,從消息發送、消息存儲和消息消費三個階段介紹RocketMQ是如何保證消息的可靠性的。

[[379969]]

消息的發送方式有哪幾種?存儲消息的可靠性面臨哪些挑戰?消費消息的確認機制是怎樣的?本文通過分析消息流轉的整個過程,從消息發送、消息存儲和消息消費三個階段介紹RocketMQ是如何保證消息的可靠性的。

分布式系統中一個重要的前提假設是所有的網絡傳輸都是不可靠的,在網絡傳輸不可靠的情況下,保證消息的可靠傳輸,除了進行重試投遞別無他法。常用的絕大多數消息隊列RocketMQ、RabbitMQ等在消息傳輸上都只能保證至少傳輸成功一次,也即(At least once),而不能保證只傳輸成功一次(Exactly once)。由于分布式系統網絡的不可靠,可能就會出現消息丟失的現象,那么RocketMQ是如何最大限度的保證消息不丟失的呢?那就需要從消息的產生到最終消費的整個過程來分析,消息完整鏈路可以劃分為以下三個階段:

  • 生產階段:消息在 Producer 發送端創建出來,經過網絡傳輸發送到 Broker 存儲端。
  • 存儲階段:消息在 Broker 端存儲,如果是主備或者多副本,消息會在這個階段被復制到其他的節點或者副本上。
  • 消費階段:Consumer 消費端從 Broker存儲端拉取消息,經過網絡傳輸發送到 Consumer 消費端上,并通過重試來最大限度的保證消息的消費。

一 發送端消息可靠性

發送端Producer發送消息Broker端的核心邏輯如下圖所示:

 

消息發送一般有以下幾種方式:同步發送、異步發送以及單向發送,業務具體選擇哪種方式進行消息發送,需要根據情況進行判斷,下面具體介紹不同的發送方式實現的消息可靠性保證。

1 同步發送

同步發送是指發送端在發送消息時,阻塞線程進行等待,直到服務器返回發送的結果。發送端如果需要保證消息的可靠性,防止消息發送失敗,可以采用同步阻塞式的發送,然后同步檢查Brocker返回的狀態來判斷消息是否持久化成功。如果發送超時或者失敗,則會默認重試2次,RocketMQ選擇至少傳輸成功一次的消息模型,但是有可能發生重復投遞,因為網絡傳輸是不可靠的,具體的重試策略可以參照第四小節。

2 異步發送

異步發送是指發送端在發送消息時,傳入回調接口實現類,調用該發送接口后不會阻塞,發送方法會立即返回,回調任務會在另一個線程中執行,消息發送結果會回傳給相應的回調函數。具體的業務實現可以根據發送的結果信息來判斷是否需要重試來保證消息的可靠性。

3 單向發送

單向發送是指發送端發送完成之后,調用該發送接口后立刻返回,并不返回發送的結果,業務方無法根據發送的狀態來判斷消息是否發送成功,單向發送相對前兩種發送方式來說是一種不可靠的消息發送方式,因此要保證消息發送的可靠性,不推薦采用這種方式來發送消息。

4 發送重試策略

RocketMQ架構模型中會有多個Borker為某個topic提供服務,一個topic下的消息分散存儲在多個Broker存儲端,它們是多對多關系。Broker會將其提供存儲服務的topic的元數據信息上報到NameServer,對等NameServer節點組成的高可用服務會維護topic與Broker之間的映射關系,多對多的映射關系為消息可以重試發送到多個Broker端提供了前提與基礎。

當發送端需要發送消息時,如果發送端中緩存了topic的路由信息,并包含了消息隊列,則直接返回該路由信息,如果沒有緩存或沒有消息隊列,則向NameServer查詢該topic的路由信息,查詢到路由消息之后,采用指定的隊列選擇策略選擇相應的queue發送消息,默認是采用輪詢策略,發送成功則返回, 收到異常則根據相應的策略進行重試,可以根據發送端感知到的Broker的時延、上次發送失敗的Broker信息和發送端配置的是否重試不同Broker的參數以及發送端設置的最大超時時間等等策略來靈活地實現不同等級的消息發送可靠性保證。重試策略可以有效的保證消息發送成功的概率,最終提高消息發送的可靠性。

二 存儲端消息可靠性

RocketMQ的消息存儲結構如下圖所示:

 

  • 消息隊列存儲的最小單位是消息Message。
  • 同一個Topic下的消息映射成多個邏輯隊列。
  • 不同Topic的消息按照到達broker的先后順序以Append的方式添加至CommitLog,順序寫,隨機讀。

目前RocketMQ存儲模型使用本地磁盤進行存儲,數據寫入為producer -> direct memory -> pagecache -> 磁盤,數據讀取如果pagecache有數據則直接從pagecache讀,否則需要先從磁盤加載到pagecache中。Broker存儲節點的文件存儲模式如下圖所示:

 

Broker端CommitLog采用順序寫,可以大大提高寫入效率,同時采用不同的刷盤模式提供不同的數據可靠性保證,此外采用了ConsumeQueue中間結構來存儲偏移量信息,實現消息的分發。由于ConsumeQueue結構固定且大小有限,在實際情況中,大部分的ConsumeQueue 能夠被全部讀入內存,可以達到內存讀取的速度。此外為了保證CommitLog和ConsumeQueue的一致性, CommitLog里存儲了Consume Queues 、Message Key、Tag等所有信息,即使ConsumeQueue丟失,也可以通過 commitLog完全恢復出來,這樣只要保證commitLog數據的可靠性,就可以保證Consume Queue的可靠性。

RocketMQ存儲端采用本地磁盤進行CommitLog消息數據的存儲,不可避免的就會帶來存儲可靠性的挑戰,如何保證消息不丟失,RocketMQ消息服務一直在不斷提高數據的可靠性。

1 存儲可靠性挑戰

RocketMQ存儲端也即Broker端在存儲消息的時候會面臨以下的存儲可靠性挑戰:

  1. Broker正常關閉
  2. Broker異常Crash
  3. OS Crash
  4. 機器掉電,但是能立即恢復供電情況
  5. 機器無法開機(可能是cpu、主板、內存等關鍵設備損壞)
  6. 磁盤設備損壞

1正常關閉,Broker 可以正常啟動并恢復所有數據。2、3、4同步刷盤可以保證數據不丟失,異步刷盤可能導致少量數據丟失。5、6屬于單點故障,且無法恢復。解決單點故障可以采用增加Slave節點,主從異步復制仍然可能有極少量數據丟失,同步復制可以完全避免單點問題。

這里一般來說就需要在性能和可靠性之間做出取舍,對于RocketMQ來說,Broker的可靠性主要由兩個方面保障:

  • 單機的刷盤機制
  • 主從之間的數據復制

如果設置為每條消息都強制刷盤、主從復制,那么性能無疑會降低;如果不這樣設置,就會有一定的可能性丟失消息。RocketMQ一般都是先把消息寫到PageCache中,然后再持久化到磁盤上,數據從pagecache刷新到磁盤有兩種方式,同步和異步。整體的消息寫入和讀取如下圖所示:

 

針對broker端單機存儲可靠性,主要依賴單機的刷盤策略,主從之間的副本復制可以參考下一章節的主從模式。

2 同步刷盤

消息寫入內存的 PageCache后,立刻通知刷盤線程刷盤,然后等待刷盤完成,刷盤線程執行完成后喚醒等待的線程,返回消息寫成功的狀態。這種方式可以保證數據絕對安全,但是吞吐量不大。

3 異步刷盤(默認)

消息寫入到內存的 PageCache中,就立刻給客戶端返回寫操作成功,當 PageCache中的消息積累到一定的量時,觸發一次寫操作,或者定時等策略將 PageCache中的消息寫入到磁盤中。這種方式吞吐量大,性能高,但是 PageCache中的數據可能丟失,不能保證數據絕對的安全。

實際應用中要結合業務場景,合理設置刷盤方式,尤其是同步刷盤的方式,由于頻繁的觸發磁盤寫動作,會明顯降低性能。

4 過期文件刪除

由于RocketMQ操作CommitLog、ConsumeQueue文件是基于文件內存映射機制,并且在啟動的時候會將所有的文件加載,為了避免內存與磁盤的浪費、能夠讓磁盤能夠循環利用、避免因為磁盤不足導致消息無法寫入等引入了文件過期刪除機制。最終使得磁盤水位保持在一定水平,最終保證新寫入消息的可靠存儲。

三 消費端消息可靠性

RockerMQ默認提供了至少消費一次的消費語義來保證消息的可靠消費。

通常消費消息的確認機制一般分為兩種思路:

  1. 先提交后消費
  2. 先消費,消費成功后再提交

思路1可以解決重復消費的問題但是會丟失消息,因此RocketMQ默認實現的是思路2,由各自consumer業務方保證冪等來解決重復消費問題。

消費端Consumer消費消息核心邏輯如下圖所示:

 

1 消費重試

消費者從RocketMQ拉取到消息之后,需要返回消費成功來表示業務方正常消費完成。因此只有返回CONSUME_SUCCESS才算消費完成,如果返回CONSUME_LATER則會按照不同的messageDelayLevel時間進行再次消費,時間分級從秒到小時,最長時間為2個小時后再次進行消費重試,如果消費滿16次之后還是未能消費成功,則不再重試,會將消息發送到死信隊列,從而保證消息存儲的可靠性。

2 死信隊列

未能成功消費的消息,消息隊列并不會立刻將消息丟棄,而是將消息發送到死信隊列,其名稱是在原隊列名稱前加%DLQ%,如果消息最終進入了死信隊列,則可以通過RocketMQ提供的相關接口從死信隊列獲取到相應的消息,保證了消息消費的可靠性。

3 消息回溯

回溯消費是指Consumer已經消費成功的消息,或者之前消費業務邏輯有問題,現在需要重新消費。要支持此功能,則Broker存儲端在向Consumer消費端投遞成功消息后,消息仍然需要保留。重新消費一般是按照時間維度,例如由于Consumer系統故障,恢復后需要重新消費1小時前的數據。RocketMQ Broker提供了一種機制,可以按照時間維度來回退消費進度,這樣就可以保證只要發送成功的消息,只要消息沒有過期,消息始終是可以消費到的。

四 總結

本文從消息流轉的整個過程分析了RocketMQ如何保證消息的可靠性,消息發送通過不同的重試策略保證了消息的可靠發送,消息存儲通過不同的刷盤機制以及多副本來保證消息的可靠存儲,消息消費通過至少消費成功一次以及消費重試機制來保證消息的可靠消費,RocketMQ在保證消息的可靠性上做到了全鏈路閉環,最大限度的保證了消息不丟失。

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2021-04-27 07:52:18

RocketMQ消息投遞

2024-05-09 08:04:23

RabbitMQ消息可靠性

2023-10-17 16:30:00

TCP

2017-08-21 08:51:22

CAN網絡通訊

2010-12-28 19:50:21

可靠性產品可靠性

2020-10-14 08:36:10

RabbitMQ消息

2018-09-27 14:13:27

云服務可靠故障

2024-02-28 10:26:04

物聯網數據存儲

2024-07-04 12:36:50

2019-07-26 08:00:00

微服務架構

2011-06-20 14:21:01

模塊化數據中心IT基礎設施

2021-03-04 06:49:53

RocketMQ事務

2022-03-07 08:13:06

MQ消息可靠性異步通訊

2009-12-17 16:20:20

城域網路由器

2010-07-28 18:58:54

東海證券負載均衡Array Netwo

2019-08-30 12:10:05

磁盤數據可靠性RAID

2024-08-06 09:55:25

2020-12-06 14:51:23

物聯網可靠性IOT

2010-12-28 19:55:20

軟件架構可靠性

2010-12-28 20:04:10

網絡的可靠性網絡解決方案可靠性
點贊
收藏

51CTO技術棧公眾號

久久精品xxx| 国模叶桐国产精品一区| 乱熟女高潮一区二区在线| 亚洲黄网在线观看| 加勒比中文字幕精品| 国产精品传媒视频| 国产精品91久久久久久| 催眠调教后宫乱淫校园| 免费a级在线播放| 亚洲视频大全| 欧美大片国产精品| 中文字幕一区二区三区5566| 一级黄色大片视频| 欧美一区二区三区久久| 亚洲国产日韩av| 成人欧美一区二区三区在线观看| 国产色无码精品视频国产| 国产69精品久久| 国产色一区二区| 久久久欧美一区二区| 中文av一区二区三区| 免费黄色片在线观看| 国产日韩亚洲| 国产亚洲一区二区精品| 国产成人久久777777| 欧美色视频免费| 久久国产福利| 亚洲天堂网站在线观看视频| 午夜dv内射一区二区| 国产爆初菊在线观看免费视频网站| 久久xxxx| 最近2019中文字幕第三页视频 | 欧美人与动牲性行为| 国产成人精品影院| 欧美精品久久久久久久久| 男人网站在线观看| 在线观看爽视频| 久久久不卡影院| 国产精品久久久久久久电影 | 少妇丰满尤物大尺度写真| 日韩av毛片| 成人美女在线观看| 91超碰caoporn97人人| 蜜桃av免费看| 欧美日韩视频免费看| 亚洲理论在线观看| 久久99精品久久久久久青青日本| 国产www在线| 日韩欧美国产精品综合嫩v| 91麻豆精品久久久久蜜臀| 国产又粗又大又爽的视频| 丁香六月天婷婷| 首页国产欧美日韩丝袜| 久久综合电影一区| 中文字幕免费高清视频| 国产一区二区三区影视| 亚洲精品欧美专区| 久久国产精品免费一区| 一级黄色片免费| 一区二区亚洲精品| 中国china体内裑精亚洲片| www.欧美com| **欧美日韩在线观看| 亚洲色图欧美在线| 欧美一级片免费观看| 国产精品爽爽久久久久久| 伊人久久亚洲热| 最近2019免费中文字幕视频三| 中文字幕在线观看91| 中文字幕在线中文字幕在线中三区 | 国产精品视频99| 精品在线免费观看视频| 精品国产一区二区三区噜噜噜| 91精品国产一区二区| 青青草原成人网| 四虎影院观看视频在线观看| 久久九九久久九九| 国产区一区二区三区| 国产有码在线观看| 丝袜亚洲另类欧美| 久久久亚洲成人| 欧美激情图片小说| 日韩电影免费在线观看| 亚洲欧美日韩中文视频| 深夜视频在线观看| 日韩福利影视| 在线观看视频一区| 精品中文字幕av| 黄页网站在线观看免费| 国产精品白丝在线| 日本一区二区三区精品视频| 亚洲三级黄色片| 成人动漫一区二区三区| 亚洲xxxx3d| 91久久精品无码一区二区| 久久精品人人| 日本高清久久天堂| 久久国产视频精品| 亚洲美女毛片| 国自在线精品视频| 欧美人妻一区二区| 欧美黄色一区二区| 欧美久久久精品| 91麻豆免费视频网站| 久久综合成人| 日韩网站免费观看| 亚洲精品久久久久久国| 国产精品99久久| 精品国模在线视频| 成人一级黄色大片| 亚洲天堂一区二区三区四区| 日韩一区二区三区在线播放| 免费黄色国产视频| 久久精品青草| 久久国产精品久久久| 欧美手机在线观看| 女主播福利一区| 欧美裸体xxxx极品少妇| 麻豆一区二区三区精品视频| 黄色工厂这里只有精品| 国语对白做受69| 欧美日韩乱国产| 久久人人精品| 国产精品网站入口| 91肉色超薄丝袜脚交一区二区| 久久99精品久久久久| 成人性教育视频在线观看| 国产人妻精品一区二区三| 国产乱理伦片在线观看夜一区| 97人人模人人爽人人少妇| 蜜桃久久一区二区三区| 久久这里只有精品视频网| 青青草原亚洲| 黄色在线免费网站| 亚洲一级二级在线| 欧美v在线观看| 日韩深夜福利网站| 精品国产1区二区| 疯狂揉花蒂控制高潮h| 欧美最新另类人妖| 久久国产色av| 91国产丝袜播放在线| 老牛嫩草一区二区三区日本| 成人黄色短视频在线观看| 亚洲精品喷潮一区二区三区| av午夜精品一区二区三区| 欧美高清一区二区| 在线播放麻豆| 亚洲国产成人91porn| 波多野结衣天堂| 在线视频亚洲欧美中文| 亚洲欧美日韩精品久久| 日本在线一级片| 亚洲免费网站| 91黄在线观看| 啊v视频在线| 亚洲在线一区二区三区| 成人在线观看a| 视频亚洲一区二区| 国产一区二区免费| 国产亚洲精品女人久久久久久| 久久久xxx| 北条麻妃高清一区| 1024视频在线| 精品国产精品三级精品av网址| 亚洲天堂国产视频| 夜色77av精品影院| 欧美日韩国产成人在线观看| 国产成人自拍偷拍| 不卡电影一区二区三区| 国产又大又长又粗又黄| 日韩影片中文字幕| 欧美精品一区二区三区视频 | 亚洲另类一区二区| 一区二区xxx| 色哟哟精品丝袜一区二区| 久久亚洲欧美日韩精品专区| 日韩 国产 欧美| 成人高清在线视频| 久久久成人精品一区二区三区| 日日av拍夜夜添久久免费| 精品久久久久久久人人人人传媒| 国产一区二区三区视频播放| 久久精品123| 国产一区精品在线| 日本不卡影院| 欧美精品久久久久久久多人混战 | 日韩免费av一区二区| 高潮一区二区三区乱码| 亚洲日本青草视频在线怡红院 | 精油按摩中文字幕久久| 日韩高清dvd| 欧美xo影院| 亚洲男人天堂网站| 久久艹免费视频| 成人av综合在线| 日韩国产小视频| 亚洲开心激情| 久久久久久69| 亚洲国产精品久久久久久6q| 17c精品麻豆一区二区免费| 国产一二三区av| 欧美日韩激情在线一区二区三区| 日韩av片永久免费网站| 青青视频在线观| 日韩欧美中文字幕在线观看| 亚洲成人av免费在线观看| 伊人久久大香线蕉综合热线 | 偷拍一区二区| 欧美一级bbbbb性bbbb喷潮片| 天天舔天天干天天操| 午夜精品久久久久久久久| 久草免费资源站| 亚洲国产婷婷| 精品一区二区三区日本| 亚洲欧洲日本韩国| 亚洲欧美综合图区| 亚洲精品一区二区二区| 国产精品精品国产色婷婷| 最新国产黄色网址| 91精品国产自产拍在线观看蜜| 91在线视频一区| 天堂av在线电影| 亚洲第一页在线| 久久久久99精品成人片三人毛片| www久久久久| 亚洲男人天堂色| 久久精品国产亚洲夜色av网站| 国产有码一区二区| 1stkiss在线漫画| 亚洲精品一区二区三区影院 | 欧美日韩一区二区三区不卡 | 香蕉久久一区二区不卡无毒影院| 亚洲人人夜夜澡人人爽| 日韩在线a电影| 久久精品在线免费视频| 精品视频在线你懂得| 国产精品久久久久77777| 巨大荫蒂视频欧美另类大| 日韩欧美国产综合在线一区二区三区| 国产成人无码精品| 亚洲国产精品二十页| 中文字幕55页| 一区二区黄色| 亚洲国产日韩综合一区| 免费欧美网站| 日本精品免费一区二区三区| 日本激情视频在线观看| 亚洲精品在线观看网站| 中文字幕av无码一区二区三区| 亚洲欧美日韩成人高清在线一区| 亚洲国产综合视频| 久久99精品久久久久久国产越南| 国产一级爱c视频| 日韩在线视频精品| 久久久久久久久一区| 成人综合日日夜夜| 欧美亚洲另类激情另类| 国产剧情在线| 亚洲精品资源在线| 国产特级aaaaaa大片| 日韩欧美中文在线| 免费一级片视频| 国产精品久久久久久久久免费桃花| 东京热av一区| 国产在线精品一区在线观看麻豆| 国产精品无码一区二区在线| 亚洲国产成人精品女人| 欧美日韩国产一二| 中文字幕亚洲在线观看| 国产精品亚洲激情| 英国三级经典在线观看| 欧美日韩成人免费| 香蕉视频网站在线观看| 亚洲男人天堂2023| 人妻va精品va欧美va| 欧美军同video69gay| 亚洲欧美偷拍一区| 亚洲国产成人tv| 青娱乐免费在线视频| 国产精品伦一区| 国产又粗又猛又爽又黄av| 成人免费毛片a| 欧美专区第二页| 激情文学综合丁香| 久久婷婷综合色| 日本大胆欧美人术艺术动态| 日韩在线综合网| 影音先锋在线一区| 久久久久99精品成人片| 欧美日本一区| 精品人妻人人做人人爽| 中文乱码免费一区二区三区下载| 一区二区欧美日韩| 欧美三级情趣内衣| 热re99久久精品国99热蜜月| 日韩欧美天堂| 久久久99爱| 亚洲涩涩av| 欧美在线视频二区| 精品国产乱码久久久| 日韩精品成人一区二区在线观看| 一区二区导航| 欧美日韩无遮挡| 欧美老女人另类| 亚洲精品一区二区毛豆| 日韩国产欧美| 一区二区三区四区欧美| 天天做天天爱天天综合网2021| 一区二区三区av| 亚洲综合激情在线| 欧美极品少妇无套实战| 亚洲黄色精品| 男人天堂1024| 日韩av一级电影| 91视频这里只有精品| 国产在线视视频有精品| 日本少妇xxxx软件| av网站免费线看精品| 黄色aaa视频| 国产精品电影一区二区三区| 亚洲 欧美 变态 另类 综合| 亚洲免费三区一区二区| 国产午夜精品一区二区理论影院 | 中文字幕av在线免费观看| 欧美群妇大交群中文字幕| a在线观看免费| 亚洲护士老师的毛茸茸最新章节| 人成在线免费视频| 日韩中文字幕视频在线| 午夜dj在线观看高清视频完整版| 韩国日本不卡在线| 成人性生交大片免费网站| 国产精品久久久久久久久| 成人午夜888| 九九九九九九精品| 久久久影院免费| 日韩一级性生活片| 久久永久免费| 精品人妻一区二区三区免费| av一区二区三区四区| 日本人亚洲人jjzzjjz| 亚洲欧洲综合另类在线| 日本天堂在线视频| 色欧美88888久久久久久影院| 国产乱人乱偷精品视频| 日韩激情片免费| 日本在线视频网| 91av视频导航| 国产一区二区| 欧美日韩另类丝袜其他| 欧美成人首页| av网址在线观看免费| 国产成人在线视频播放| 国产小视频自拍| 亚洲香蕉伊在人在线观| 中文字幕欧美人妻精品| 亚洲高清福利视频| 欧美私人网站| 欧美在线不卡区| 日韩黄色av| 亚洲一区在线免费| 国产精品久久久一区二区| 天天综合天天添夜夜添狠狠添| 成人动漫中文字幕| 亚洲欧美精品久久| 一本久久综合亚洲鲁鲁五月天 | 中文字幕日韩在线观看| gogo高清在线播放免费| 国产精品视频大全| 色先锋久久影院av| 大西瓜av在线| 国内外成人在线视频| 欧美人妻一区二区三区| 欧美日韩国产一区二区| www.看毛片| 久久精品影视伊人网| 怡红院成人在线| 精品一区在线播放| 国产精品va| 91精品国产三级| 国产精品美女久久久久aⅴ| 国产91精品看黄网站在线观看| 精品国产凹凸成av人导航| av黄色在线| 91精品在线国产| 97精品国产福利一区二区三区| 毛葺葺老太做受视频| 久久综合久久鬼色中文字| 欧美亚洲天堂网| 精品av久久707| 大香伊人久久| 国产亚洲情侣一区二区无| 禁久久精品乱码| 成人在线电影网站| 亚洲成人免费视| 天天躁日日躁狠狠躁喷水| 欧美精品国产精品日韩精品| 试看120秒一区二区三区| 粉嫩av一区二区三区天美传媒|