精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

午夜影院黄色片| 国产一区二区三区四区大秀| 毛片在线免费播放| 日本美女视频网站| 免费在线观看日韩av| 中国女人真人一级毛片| 蜜桃av免费看| 五月天婷婷导航| 91尤物国产福利在线观看| 国产大片在线免费观看| 手机在线免费看片| 日韩 欧美 精品| 国产精品迅雷| 亚洲无码精品一区二区三区| 精品极品在线| 爱爱精品视频| 免费视频一区二区| 欧美日韩精品欧美日韩精品一| 女人抽搐喷水高潮国产精品| 韩国av一区| 久久久久久久久久电影| 久久在线免费观看| 欧美剧情片在线观看| 欧美成人免费在线观看| 亚洲欧美日韩中文字幕一区二区三区| 国内精品久久久久久久久| 国产一级做a爰片久久毛片男| 国产成人愉拍精品久久| 九九热精品国产| 性欧美在线视频| 五月花成人网| 免费看成人哺乳视频网站| 青青草精品视频| 18成人在线视频| 日韩一区二区中文字幕| 成人女保姆的销魂服务| 一区精品在线| mm131丰满少妇人体欣赏图| 樱花视频在线免费观看| 欧美女人交a| 欧美伊人久久大香线蕉综合69| 国产精品久久亚洲7777| 阿v天堂2014| 高清欧美日韩| 久9re热视频这里只有精品| 精品二区在线观看| 99久久久免费精品| 国产精品一区二区三区在线免费观看 | 国产精品美女久久| 亚洲精品视频一区二区三区| 麻豆av免费在线| 欧美第一页在线| 91豆花精品一区| 亚洲女则毛耸耸bbw| 深夜视频一区二区| 国产亚洲人成网站| 国产精品美女久久久久久免费 | 最新国产精品自拍| 涩涩av在线| 精品一区二区在线免费观看| 精品国产成人系列| 亚洲成人精品在线| 国产成人在线精品| 少妇无码av无码专区在线观看 | 国产 日韩 欧美 在线| 国产黄色精品| 欧美日韩国产限制| 欧美午夜欧美| 中文字幕自拍偷拍| 麻豆免费精品视频| 欧美劲爆第一页| 久热精品视频在线观看| 欧美日韩美女在线| 久久亚洲中文字幕无码| 国产三级小视频| 91久久久精品国产| 国产精品一区二区你懂的| 欧洲在线/亚洲| 影音先锋在线亚洲| 国产偷拍一区二区| 国产乱国产乱300精品| 成人免费网站在线| 日本黄色大片视频| 成人在线免费观看网站| 欧美性xxxx极品hd满灌| 欧美一级特黄aaaaaa在线看片| 午夜精品在线播放| 日韩电影免费在线看| 久久精品国产96久久久香蕉| 鲁鲁视频www一区二区| 国产91美女视频| 91成品人影院| 精品午夜久久福利影院| 欧美成人精品一区二区| 国产精品无码一区二区三区免费 | 欧美另类极品videosbest最新版本 | 99re热精品| 97免费在线观看视频| 视频一区视频二区中文| 久久精品电影一区二区| 成人亚洲激情网| 99久久免费看精品国产一区| 日本性爱视频在线观看| 一级女性全黄久久生活片免费| 国产成人精品免费视频| 日本精品入口免费视频| 久久九九国产| 欧美日韩色一区| 黄色片久久久久| eeuss影院在线播放| 亚洲电影男人天堂| 精品国产一二三| 熟女俱乐部一区二区视频在线| 日韩一区亚洲二区| 精品视频在线导航| 激情黄色小视频| 不卡专区在线| 国产精品系列在线播放| 久久婷婷国产综合国色天香 | 国内外成人免费在线视频| 欧美国产在线看| 欧美v亚洲v| 久久免费国产精品| 中国一级黄色录像| 黄色网址在线免费| 四季av一区二区凹凸精品| 亚洲精品自产拍| 超碰手机在线观看| 国产一区二区三区四区三区四 | 免费精品视频最新在线| 久久99精品久久久久久三级| 欧美视频xxx| 亚洲四区在线观看| 色婷婷综合久久久久中文字幕| 久久精品一二三区| 日韩精品毛片| 日韩三级在线| 亚洲欧美日韩区| 日本黄色播放器| 午夜精品久久久久久久爽| 国产精品美女视频| 久久精品99无色码中文字幕| 影音先锋国产在线| www视频在线观看| 在线看av的网址| 精品一区二区三区免费| 欧美日韩在线一区二区三区| 麻豆视频在线观看免费网站黄| 91精品国产综合久久精品图片| 中国china体内裑精亚洲片| 亚洲狠狠婷婷综合久久久| 亚洲天堂免费电影| 国产精品色呦呦| 日本一区二区黄色| 美日韩中文字幕| 久久精品国产69国产精品亚洲| 91精品中文字幕| 国产精品视频yy9299一区| 国产精品嫩草影院8vv8| 欧美三级自拍| 色综合视频网站| 亚洲天堂中文字幕在线| 成人av在线播放网站| 国产精品久久久久久免费观看 | 欧美一区二区视频97| 少妇高潮流白浆| www.av麻豆| 成人在线视频一区| av资源站久久亚洲| 日本理论片午伦夜理片在线观看| 欧美三级日韩在线| 国产精品酒店视频| 欧美日韩一区二区三区四区不卡| 欧美一区第一页| 91高清在线视频| 欧美麻豆精品久久久久久| 国产小视频你懂的| 亚洲情侣在线| 欧美与黑人午夜性猛交久久久| 国产夫妻性生活视频| 午夜久久久久久久久 | 国产精品中文字幕一区二区三区| 欧美 另类 交| 国产高清视频一区二区| 国产精品亚洲二区| 一本一道久久a久久精品综合蜜臀| 亚洲色图久久久| 亚洲午夜剧场| 久久久久亚洲蜜桃| 东北少妇不带套对白| 精品91久久| 色哟哟在线观看一区二区三区| 波多野结衣电影免费观看| 日韩精品一区二区三区中文| 欧美性一二三区| 久草免费在线观看视频| 久久中文字幕一区二区三区| 中文字幕99| www五月天com| 亚洲午夜极品| 日产中文字幕在线精品一区| 欧美 日韩 激情| 3344国产永久在线观看视频| 欧美图片一区二区三区| 性折磨bdsm欧美激情另类| 亚洲国产一区二区三区高清| 欧美精品生活片| 国产精品xxxxxx| 一本色道久久综合一区| 国产主播精品在线| 啊v在线视频| 亚洲成在人线av| 亚洲在线观看av| 久久男人中文字幕资源站| 老司机av网站| 国内不卡的一区二区三区中文字幕 | 国产91精品青草社区| 一区二区国产精品精华液| 日韩久久99| 亚洲精品一区二区三区四区高清 | 精品电影一区| 午夜伦理精品一区| 国产一区二区网站| 国产美女精品在线| 不卡影院免费观看| 久久久久久久免费| 99reav在线| 亚洲国产精彩中文乱码av| 一区二区www| 疯狂做受xxxx欧美肥白少妇| 欧美成人精品一区二区免费看片| 国产精品高清亚洲| 黑森林福利视频导航| 一区二区三区精| 日日骚欧美日韩| 九九爱精品视频| 成人av色网站| 色婷婷激情一区二区三区| 青青青视频在线免费观看| 91在线精品秘密一区二区| 7777女厕盗摄久久久| 操她视频在线观看| 国产欧美一二三区| 小说区图片区图片区另类灬| 国产黄色小视频在线观看| 成人黄色在线看| 一边摸一边做爽的视频17国产| 免费永久网站黄欧美| 免费久久一级欧美特大黄| 精品视频在线观看网站| 91在线视频九色| av动漫免费观看| 中文无码日韩欧| 欧美极品第一页| 影院在线观看全集免费观看| 91久久一区二区| 性色av蜜臀av色欲av| 99久久精品免费| 男男一级淫片免费播放| 亚洲在线免费| 亚洲毛片aa| 久久精品亚洲人成影院 | 不卡的国产精品| 91黄在线观看| 欧美日韩免费看片| 色黄久久久久久| 高h调教冰块play男男双性文| 精品久久久久久中文字幕| 亚洲精品日韩成人| 亚洲乱码国产乱码精品| 成人h精品动漫一区二区三区| 欧美视频亚洲图片| 国产精品国产一区| 91夜夜未满十八勿入爽爽影院| 亚洲综合伊人| 69174成人网| 久久久久影视| 日韩少妇中文字幕| 亚洲成人国产| 免费日韩av电影| 欧美mv日韩| 狠狠色噜噜狠狠色综合久 | 亚洲澳门在线| 国产又粗又大又爽的视频| 爱看av在线入口| 高清毛片在线观看| 亚洲成人a级片| 92福利视频午夜1000合集在线观看| 天天射天天干天天| 亚洲伦理在线精品| 日本天堂在线播放| 久久久一区二区| 五月天视频在线观看| 欧美88av| 亚洲小说欧美另类激情| 在线视频观看日韩| 六月丁香激情网| 日韩精品一卡二卡三卡四卡无卡| 91福利国产成人精品播放| 第一会所sis001亚洲| 日本免费在线视频观看| 91久久在线| 在线成人免费av| 日韩av一区二区三区四区| 人妻换人妻仑乱| 国产欧美视频在线观看| 精品粉嫩aⅴ一区二区三区四区| 波多野结衣在线免费观看| 26uuu久久天堂性欧美| 亚洲一区二区三区精品在线观看 | 色狠狠久久aa北条麻妃 | 国产日韩在线看| 57pao成人永久免费| 九色91在线视频| 国际精品欧美精品| 成人免费视频91| 麻豆传媒一区二区三区| 最近中文字幕免费视频| 国产高清自产拍av在线| 久久乐国产精品| 青青在线精品| 欧美日韩国产在线播放网站| 男女视频在线观看网站| 国产亚洲欧美日韩在线一区| 黑人操日本美女| 欧美日韩美少妇| 成人在线免费看| 精品国产免费一区二区三区四区 | 成品人视频ww入口| 91成人精品| 欧美国产视频一区| 国产在线一区观看| 少妇高潮在线观看| 欧美日韩国产成人在线免费| 亚洲免费视频网| 亚洲一区二区三区自拍| 日本免费在线播放| 亚洲精品乱码久久久久| 久久久久99精品成人片试看| 在线区一区二视频| 欧美视频xxx| 97免费视频在线| 久久久亚洲精品无码| 亚洲欧美视频| 97人妻精品一区二区三区免| 日本一区二区三区四区| 欧美亚洲另类小说| 五月天久久比比资源色| 国产高清免费在线观看| 最近2019中文字幕大全第二页 | 成a人v在线播放| 欧美一级片久久久久久久| 欧美综合影院| 日本大胆人体视频| 香蕉视频成人在线观看| 91免费精品视频| 九色porny丨国产首页在线| 国产精品12| 日韩深夜福利| 亚洲电影网站| 日韩a在线看| 欧美日韩国产中字| 日本私人网站在线观看| 欧美亚洲第一区| 大桥未久女教师av一区二区| 亚洲aⅴ日韩av电影在线观看 | 男人的天堂久久精品| 性高潮免费视频| 精品成人在线视频| 欧洲伦理片一区 二区 三区| 茄子视频成人在线| 免费一区二区三区四区| 亚洲人成伊人成综合网久久久| 每日更新在线观看av| 伊人久久久久久久久久久久久| heyzo在线欧美播放| 97netav| 亚洲免费网站| 久久成人小视频| 91精品国产综合久久久蜜臀粉嫩 | 黑森林av导航| 亚洲丶国产丶欧美一区二区三区| 亚洲精品国产精品乱码| 亚洲欧美一区二区三区在线| 在线黄色的网站| 一区二区精品国产| 美女视频一区免费观看| 精品国产乱码久久久久夜深人妻| 一区二区三区欧美日韩| 天堂在线观看av| 亚洲国产一区二区a毛片| 日本一本在线观看| 欧美在线播放| 色婷婷狠狠18禁久久| 欧美日韩激情网| 黄网站在线免费| 久久亚洲精品欧美| 久久精品国产一区二区| 欧美成人黄色网| 日本成人中文字幕|