国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区

當前位置:首頁 > 科技  > 軟件

三分鐘白話RocketMQ系列—— 如何存儲消息

來源: 責編: 時間:2023-08-14 22:00:55 417觀看
導讀我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何存儲消息的,揭秘消息存儲全過程。注意,如果白話中不小心提到相關代碼配置與類名,請參考RocketMQ 4.9.4版本關鍵

我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。K8328資訊網——每日最新資訊28at.com

那接下來,我們白話一下,RocketMQ是如何存儲消息的,揭秘消息存儲全過程。K8328資訊網——每日最新資訊28at.com

注意,如果白話中不小心提到相關代碼配置與類名,請參考RocketMQ 4.9.4版本K8328資訊網——每日最新資訊28at.com

關鍵字摘要
  • 存儲模型與存儲類型
  • 如何保證存儲消息不丟失
  • 如何提高寫入性能
  • 如何清理過期消息

存儲模型是什么?有哪些存儲類型?

RocketMQ使用了一種基于日志的存儲方式,將消息以順序寫入的方式追加到文件中,從而實現(xiàn)高性能的消息存儲和讀取。K8328資訊網——每日最新資訊28at.com

RocketMQ的消息存儲方式可以分為兩個類型:CommitLog 和ConsumeQueue 。K8328資訊網——每日最新資訊28at.com

圖片圖片K8328資訊網——每日最新資訊28at.com

還有一個文件類型是indexfile,主要用于控制臺消息檢索,不影響消息的寫入與消費,我們就不展開了。K8328資訊網——每日最新資訊28at.com

CommitLog

CommitLog文件存儲了Producer端寫入的消息主體內容,它以追加寫入的方式將消息存儲到磁盤上的文件中。K8328資訊網——每日最新資訊28at.com

單個文件大小默認1G ,文件名長度為20位(左邊補零,剩余為起始偏移量),當文件滿了,寫入下一個文件。K8328資訊網——每日最新資訊28at.com

比如00000000000000000000代表了第一個文件,起始偏移量為0,文件大小為1G=1073741824;當?shù)谝粋€文件寫滿了,第二個文件為00000000001073741824,起始偏移量為1073741824,以此類推。K8328資訊網——每日最新資訊28at.com

它的主要特點是:順序寫,但是隨機讀(被ConsumeQueue讀取)。K8328資訊網——每日最新資訊28at.com

雖然是隨機讀,但是利用package機制,可以批量地從磁盤讀取,作為cache存到內存中,加速后續(xù)的讀取速度。K8328資訊網——每日最新資訊28at.com

Broker單個實例下所有的隊列共用一個日志數(shù)據(jù)文件CommitLog來存儲。而Kafka采用的是獨立型的存儲結構,每個隊列一個文件。K8328資訊網——每日最新資訊28at.com

ConsumeQueue

ConsumeQueue文件是用于支持消息消費的存儲結構。保存了指定Topic下的隊列消息在CommitLog中的起始物理偏移量offset,消息大小size和消息Tag的HashCode值。K8328資訊網——每日最新資訊28at.com

消費者 通過 順序讀取 ConsumeQueue文件,可以快速定位到消息在CommitLog中的物理存儲位置,從而實現(xiàn)快速消息的拉取和消費。K8328資訊網——每日最新資訊28at.com

從實際物理存儲的角度來看,每個主題Topic下的每個隊列Queue對應一個ConsumeQueue文件。K8328資訊網——每日最新資訊28at.com

生產者端的消息是順序寫入CommitLog,消費者端是順序讀取ConsumeQueue。但是根據(jù)ConsumeQueue的起始物理位置偏移量offset讀取消息真實內容,實際是隨機讀取CommitLog。實現(xiàn)了 消息生產與消息消費、數(shù)據(jù)存儲和數(shù)據(jù)索引 相互分離。K8328資訊網——每日最新資訊28at.com

怎么保證存儲消息不丟失?

刷盤機制

Broker在把消息寫入日志文件的過程中,如果在剛收到消息時,Broker異常宕機了,那么內存中尚未寫入磁盤的消息就會丟失了。K8328資訊網——每日最新資訊28at.com

因此,RocketMQ持久化消息分為兩種:同步刷盤和異步刷盤(默認配置)。K8328資訊網——每日最新資訊28at.com

異步刷盤是指Broker收到消息后先存儲到PageCache,然后立即通知Producer消息已存儲成功,可以繼續(xù)處理業(yè)務邏輯。此后,Broker會啟動一個異步線程將消息持久化到磁盤。然而,如果Broker在持久化到磁盤之前發(fā)生故障,消息將會丟失。K8328資訊網——每日最新資訊28at.com

## 刷盤策略配置flushDiskType = ASYNC_FLUSH

注意,寫入PageCache后,應用服務宕機消息不丟失,只有機器斷電或宕機會有少量消息丟失。K8328資訊網——每日最新資訊28at.com

相比之下,同步刷盤的方式是在消息存儲到緩存后不立即通知Producer,而是等待消息被持久化到磁盤后再通知Producer。這種方式確保了消息不會丟失,但性能不如異步刷盤高。一般用于金融業(yè)務。K8328資訊網——每日最新資訊28at.com

## 刷盤策略配置flushDiskType = SYNC_FLUSH

在選擇刷盤方式時,需要根據(jù)業(yè)務場景進行權衡。K8328資訊網——每日最新資訊28at.com

主從同步機制

即使Broker采用同步刷盤策略,但如果刷盤完成后磁盤損壞,會導致所有存儲在磁盤上的消息丟失。K8328資訊網——每日最新資訊28at.com

即使采用了主從復制,如果主節(jié)點在刷盤完成后還沒有來得及將數(shù)據(jù)同步給從節(jié)點就發(fā)生了磁盤故障,同樣會導致數(shù)據(jù)丟失。K8328資訊網——每日最新資訊28at.com

所以我們可以配置同步機制,等待從節(jié)點復制完成主節(jié)點的消息后,才去通知Producer完成了消息存儲。K8328資訊網——每日最新資訊28at.com

## 主從同步策略配置brokerRole=SYNC_MASTER

怎么提高存儲寫入性能?

零拷貝技術

RocketMQ通過使用內存映射文件(包括CommitLog、 ConsumeQueue等文件)來提高IO訪問性能,也就是我們常說的零拷貝技術。K8328資訊網——每日最新資訊28at.com

Java在NIO包里,引入了sendFile(FileChannel類)和MMAP(MappedByteBuffer類)兩種實現(xiàn)方式的零拷貝技術。K8328資訊網——每日最新資訊28at.com

主流的MQ都會使用零拷貝技術,來提升IO:K8328資訊網——每日最新資訊28at.com

  • Kafka:record 的讀和寫都是基于 FileChannel。index 的讀寫則基于 MMAP。
  • RocketMQ:讀取數(shù)據(jù)基于 MMAP,寫入數(shù)據(jù)默認使用 MMAP。但可以通過修改配置transientStorePoolEnable參數(shù)將其配置為使用 FileChannel。作者之所以這樣設計,是為了避免 PageCache 的鎖競爭,并通過兩層架構實現(xiàn)讀寫分離。

緩沖池寫入增強

在不開啟RocketMQ的內存映射增強方案時,RocketMQ的讀和寫都只會簡單直接使用MMAP。K8328資訊網——每日最新資訊28at.com

但是,MappedByteBuffer也存在一些缺陷:K8328資訊網——每日最新資訊28at.com

  • 使用虛擬內存,超過物理內存會導致內存交換,引起磁盤IO(可能非順序IO)速度較慢。
  • 虛擬內存交換是受操作系統(tǒng)控制的,所以其他進程活動也會觸發(fā)RocketMQ內存映射的交換。
  • 文件內存映射寫入PageCache時存在鎖競爭,直接寫入內存可避免競爭,在異步刷盤場景下速度更快。

為此,RocketMQ通過transientStorePoolEnable參數(shù)控制,對寫入進行了優(yōu)化。K8328資訊網——每日最新資訊28at.com

如果開啟了這個參數(shù),會將寫入拆分為兩步, 寫入緩沖區(qū) + 異步刷盤 的增強策略。K8328資訊網——每日最新資訊28at.com

## 刷盤策略配置flushDiskType = ASYNC_FLUSH transientStorePoolEnable = true

MappedFile會提前申請一塊直接內存用作緩沖區(qū),放棄使用mmap直接寫文件。K8328資訊網——每日最新資訊28at.com

數(shù)據(jù)先寫入緩沖區(qū),然后異步線程每200ms(且臟數(shù)據(jù)達到16K,commitCommitLogLeastPages = 4)將緩沖區(qū)的數(shù)據(jù)commit寫入FileChannel。K8328資訊網——每日最新資訊28at.com

再喚醒定時服務(FlushRealTimeService類)將FileChannel里的數(shù)據(jù)持久化到磁盤。flush函數(shù)和commit一樣也可以傳入一個刷盤頁數(shù),當臟頁數(shù)量達到16K時(flushLeastPages = 4),會進行刷盤操作,調用FileChannel的force將內存中的數(shù)據(jù)持久化到磁盤。K8328資訊網——每日最新資訊28at.com

開啟transientStorePoolEnable參數(shù)后,性能最好,但是相對來說持久化最不可靠K8328資訊網——每日最新資訊28at.com

如何處理消息的過期和刪除?

RocketMQ 使用存儲時長作為消息存儲的依據(jù),即每個節(jié)點對外承諾消息的存儲時長。在存儲時長范圍內的消息都會被保留,無論消息是否被消費;超過時長限制的消息則會被清理掉。K8328資訊網——每日最新資訊28at.com

需要注意的是,在RocketMQ中,消息存儲時長并不能完整控制消息的實際保存時間。K8328資訊網——每日最新資訊28at.com

因為消息存儲仍然使用本地磁盤,本地磁盤空間不足時,為保證服務穩(wěn)定性消息仍然會被強制清理,導致消息的實際保存時長小于設置的保存時長。K8328資訊網——每日最新資訊28at.com

建議在存儲成本可控的前提下,盡可能延長消息存儲時長。延長消息存儲時長,可以為緊急故障恢復、應急問題排查和消息回溯帶來更多的可操作空間。K8328資訊網——每日最新資訊28at.com

總結

  • 存儲模型與存儲類型:commitLog文件存儲消息物理文件,consumeQueue文件夾存儲邏輯隊列索引
  • 如何保證存儲消息不丟失:同步&異步刷盤、主從消息同步
  • 如何提高寫入性能:零拷貝技術MMAP和FileChannel、緩沖區(qū)增強 + 異步刷盤 策略
  • 如何清理過期消息:按存儲時長清理消息

本文鏈接:http://m.rrqrq.com/showinfo-26-5709-0.html三分鐘白話RocketMQ系列—— 如何存儲消息

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 編程的思辨力:程序員們解析技術背后的思想

下一篇: gRPC?vs?REST:創(chuàng)建API的方法比較

標簽:
  • 熱門焦點
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數(shù)碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發(fā)布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • Redmi Pad評測:紅米充滿野心的一次嘗試

    從Note系列到K系列,從藍牙耳機到筆記本電腦,紅米不知不覺之間也已經形成了自己頗有競爭力的產品體系,在中端和次旗艦市場上甚至要比小米新機的表現(xiàn)來得更好,正所謂“大丈夫生居
  • 7月安卓手機好評榜:三星S23Ultra好評率第一

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數(shù)據(jù)來源安兔兔評測,收集時間2023年7月1日至7月31日,僅限國內市場。第一名:三星Galaxy S23 Ultra好評率:95.71%在即將迎來新
  • 6月iOS設備性能榜:M2穩(wěn)居榜首 A系列只能等一手3nm來救

    沒有新品發(fā)布,自然iOS設備性能榜的上榜設備就沒有什么更替,僅僅只有跑分變化而產生的排名變動,畢竟蘋果新品的發(fā)布節(jié)奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現(xiàn)自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業(yè)務來說可快速實現(xiàn)自動化的上手工作。Selenium IDEKat
  • 從 Pulsar Client 的原理到它的監(jiān)控面板

    背景前段時間業(yè)務團隊偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費了、生產者消息發(fā)送緩慢等各種問題。雖然我們有個監(jiān)控頁面可以根據(jù) topic 維度查看他的發(fā)送狀態(tài),
  • “又被陳思誠騙了”

    作者|張思齊 出品|眾面(ID:ZhongMian_ZM)如今的國產懸疑電影,成了陳思誠的天下。最近大爆電影《消失的她》票房突破30億斷層奪魁暑期檔,陳思誠再度風頭無兩。你可以說陳思誠的
  • 三星獲批量產iPhone 15全系屏幕:蘋果史上最驚艷直屏

    按照慣例,蘋果將繼續(xù)在今年9月舉辦一年一度的秋季新品發(fā)布會,有傳言稱發(fā)布會將于9月12日舉行,屆時全新的iPhone 15系列將正式與大家見面,不出意外的話
  • 電博會與軟博會實現(xiàn)"線下+云端"的雙線融合

    在本次“電博會”與“軟博會”雙展會利好條件的加持下,既可以發(fā)揮展會拉動人流、信息流、資金流實現(xiàn)快速交互流動的作用,繼而推動區(qū)域經濟良性發(fā)展;又可以聚
Top 国产精品嫩草99av在线_一区在线视频观看_欧美高清一区_欧美 日韩 国产 一区_99精品欧美一区二区三区_久久大香伊蕉在人线观看热2_一色屋精品视频在线观看网站_在线亚洲国产精品网站_亚洲区一区二区三区_你懂的视频一区二区
av亚洲产国偷v产偷v自拍| 婷婷综合五月天| 91.com视频| 91传媒视频在线播放| 大陆成人av片| 乱一区二区av| 亚洲bt欧美bt精品777| 欧美性大战久久久久久久| 欧美日韩网站| 欧美高清视频一区| 高清av一区二区| 丝袜美腿亚洲一区| 久久亚洲二区三区| 精品视频在线免费观看| 久久亚洲免费| 国产九区一区在线| 国产精品久久久久久久免费软件| 欧美久久99| 午夜精品久久| 欧美色综合网| 国产精品正在播放| 成人免费观看男女羞羞视频| 国产精品一二二区| 国产麻豆精品95视频| 精品亚洲成a人| 久久精品国产**网站演员| 一区二区在线观看免费视频播放| 专区另类欧美日韩| 国产午夜精品理论片a级大结局 | 成人午夜视频在线| 成人做爰69片免费看网站| 毛片av中文字幕一区二区| 亚洲三级国产| 亚洲免费精品| 91亚洲午夜精品久久久久久| 日韩高清在线观看| 一区二区三区四区在线播放| 亚洲人成在线观看一区二区| 欧美日韩久久久一区| 国产成人亚洲综合a∨婷婷图片| 亚洲色图一区二区| 欧美调教femdomvk| 在线播放91灌醉迷j高跟美女 | 欧美久久久久久| 国产精品对白交换视频| 亚洲欧美日韩一区二区三区在线观看| 欧美视频三区在线播放| 国产精品毛片久久久久久久| 日韩中文字幕亚洲一区二区va在线 | 欧美人与禽猛交乱配视频| 91一区二区三区在线观看| 亚洲高清av| 欧美喷水一区二区| 欧美激情一区二区在线| 亚洲欧美韩国综合色| 韩国欧美国产1区| 色综合欧美在线视频区| 亚洲乱亚洲高清| 久久一区二区三区国产精品| 久久se精品一区精品二区| 91久久夜色精品国产九色| 亚洲精品一区二区三区av| 亚洲三级国产| 色婷婷综合在线| 久久一区二区三区av| 亚洲精品看片| 欧美午夜电影在线播放| 亚洲伦伦在线| 欧美成人一区二区| 亚洲国产一区视频| 99热免费精品在线观看| 欧美一区二区三区系列电影| 亚洲v日本v欧美v久久精品| 亚洲欧美亚洲| 国产午夜精品一区二区三区视频| 日韩av网站免费在线| 久久综合久久久久88| 亚瑟在线精品视频| 亚洲特级毛片| 国产精品免费视频网站| 成人黄页在线观看| 日韩精品资源二区在线| 国产自产2019最新不卡| 欧美调教femdomvk| 老司机精品视频一区二区三区| 欧美亚洲国产一区二区三区va | 色一区在线观看| 中文av一区二区| 免费一区二区视频| 国产成人免费网站| 91免费版在线看| 日韩精品中午字幕| 午夜欧美2019年伦理| 黄色欧美成人| 亚洲成人你懂的| 欧美日韩久久一区二区| 狠狠色丁香九九婷婷综合五月| 777亚洲妇女| 成人深夜福利app| 亚洲免费av高清| 鲁鲁狠狠狠7777一区二区| 欧美一区二区三区四区在线观看| 国产精品麻豆欧美日韩ww| 免费观看在线综合色| 成人91在线观看| 欧美日韩国产系列| 国产精品资源在线看| 久久久久看片| 欧美aⅴ99久久黑人专区| 亚洲欧洲日产国产综合网| 老鸭窝91久久精品色噜噜导演| 狠狠色丁香久久婷婷综| 国产精品久久99| 日本精品一级二级| 午夜精品亚洲| 久久成人精品无人区| 亚洲视频 欧洲视频| 在线精品亚洲一区二区不卡| 韩国精品一区二区三区| 美脚の诱脚舐め脚责91| 一区二区三区久久| 国产日韩欧美精品在线| 欧美老女人第四色| 国产精品久久亚洲7777| 午夜国产精品视频免费体验区| 蜜臀精品一区二区三区在线观看| 国产精品超碰97尤物18| 精品国产乱码久久久久久浪潮| 91久久免费观看| 正在播放亚洲| 国产日韩一区二区三区| 欧美一区亚洲二区| 99热在这里有精品免费| av中文字幕一区| jlzzjlzz亚洲日本少妇| 成人爽a毛片一区二区免费| 成人污污视频在线观看| 国产传媒欧美日韩成人| 成人激情免费电影网址| 成人三级伦理片| 麻豆国产一区二区| 国产精品一区二区三区乱码 | 久久综合国产精品| 日韩一区二区精品在线观看| 欧美在线看片a免费观看| 欧美性猛交xxxxxxxx| 欧美一区二区在线视频| 日韩欧美在线不卡| 国产欧美视频一区二区| 亚洲色图清纯唯美| 蜜桃av噜噜一区| 99精品久久99久久久久| 国产精品豆花视频| 国产精品一区视频网站| 51午夜精品国产| 国产亚洲成aⅴ人片在线观看| 一区二区免费在线播放| 欧美国产视频在线| 2022国产精品视频| 五月开心婷婷久久| eeuss鲁片一区二区三区在线看| 日韩视频在线一区二区三区| 美脚丝袜一区二区三区在线观看| 欧美精品1区2区| 亚洲成人精品在线观看| 成人高清视频在线| 欧美视频三区在线播放| 中文字幕国产一区| 黄色日韩网站视频| 日韩视频二区| 中文字幕亚洲在| 91热门视频在线观看| 欧洲一区在线观看| 中文字幕日韩精品一区| 成人v精品蜜桃久久一区| 精品91在线| 欧美一级片免费看| 亚洲国产精品一区二区www在线| 欧美福利精品| 2021久久国产精品不只是精品| 精品午夜一区二区三区在线观看| 91久久国产自产拍夜夜嗨| 亚洲国产成人一区二区三区| 国产不卡在线一区| 91精品国产欧美一区二区| 麻豆专区一区二区三区四区五区| 免费精品视频| 日韩专区中文字幕一区二区| 一区二区三区四区五区精品视频| 中文字幕制服丝袜成人av| 亚洲视频日本| 亚洲无线码一区二区三区| 国产日韩欧美高清免费| 亚洲成av人影院| 91福利视频在线| 波多野结衣中文字幕一区二区三区| 日韩视频免费直播| 国内一区二区在线视频观看| 亚洲欧美怡红院| 欧美亚洲高清一区|