消息存儲機制-索引文件及頁緩存

對于生產者來說,將消息寫到commit log文件里面。這里會有消息的邏輯隊列,邏輯隊列里面保存了消息的偏移量。

除了consumerquenue之外,它還會將數據分發到另外一個文件叫indexfile索引文件里面。

這個索引文件可以保存消息的一些信息,比如物理的偏移量,消息的鍵,消息的頭。然后還可以通過hash找到消息的位置。

這里面有個非常關鍵點叫做時間戳。在timestamp時間戳里面,之前在聊kafka的時候說過,kafka也可以根據某個時間點來找到某個消息的偏移量,Rocketmq也具備這種能力。

可以根據某個時間點來找到這個偏移量,在另外一個索引文件IndexFile里面提供了可以搜索數據的地方。

IndexFile

IndexFile(索引?件)提供了?種可以通過key或時間區間來查詢消息的?法。
Index?件的存儲位置是:$HOME \store\index${fileName},?件名fileName是以創建時的時間戳命名的,固定的單個IndexFile?件??約為400M,?個IndexFile可以保存 2000W個索引,IndexFile的底層存儲設計為在?件系統中實現HashMap結構, 故rocketmq的索引?件其底層實現為hash索引。
在上?的RocketMQ的消息存儲整體架構圖中可以看出,RocketMQ采?的是混合型的存儲結構,即為Broker單個實例下所有的隊列共??個?志數據?件(即為 CommitLog)來存儲。
RocketMQ的混合型存儲結構(多個Topic的消息實體內容都存儲于?個CommitLog)針對ProducerConsumer分別采?了數據和索引部分相分離的存儲結構Producer發送消息?Broker端,然后Broker端使?同步或者異步的?式對消息刷盤持久化,保存?CommitLog中。只要消息被刷盤持久化?磁盤?件 CommitLog中,那么Producer發送的消息就不會丟失。
正因為如此,Consumer也就肯定有機會去消費這條消息。當?法拉取到消息后,可以等下?次消息拉取,同時服務端也?持?輪詢模式,如果?個消息拉取請求未拉取到消息,Broker允許等待
30s的時間,只要這段時間內有新消息到達,將直接返回給消費端。
這?, RocketMQ的具體做法是,使?Broker端的后臺服務線程—ReputMessageService不停地分發請求并異步構建ConsumeQueue(邏輯消費隊列)和IndexFile(索引?件) 數據。

真正的數據是保存在commit log里面

#commitLog存儲路徑
storePathCommitLog=/usr/local/rocketmq/broker-a-master/store/commitlog[root@localhost commitlog]# ls
00000000000000000000

如果所有的操作都在訪問00000000000000000000這樣的數據文件,它的性能會有一些影響。

為了解決這個問題Rocketmq做了一些提升。雖然這部分是磁盤文件,但是Rocketmq使用了順序的讀寫使用了頁緩存的概念,使用了0拷貝相關的技術讓Rocketmq在讀這個文件的性能上面也可以做到非常快。

頁緩存與內存映射

如果所有的數據都在訪問磁盤文件,在訪問磁盤文件的時候會存在用戶態到內核態的轉換。
在用戶態要讀取和寫入文件,這個是磁盤上面的文件。所以要轉化為內核態。去讀取磁盤上的文件。
為了解決這樣一個問題,rocketmq提供了頁緩存,操作系統使用頁緩存的機制,在讀取緩存的時候,它們之間會創建映射的關系。用內存當中的緩存映射出磁盤的數據。
?緩存(PageCache)OS對?件的緩存,?于加速對?件的讀寫。?般來說,程序
對?件進?順序讀寫的速度?乎接近于內存的讀寫速度,主要原因就是由于OS使?
PageCache機制對讀寫訪問操作進?了性能優化,將?部分的內存?作PageCache
對于數據的寫?,OS會先寫??Cache內,隨后通過異步的?式由pdflush內核線程
Cache內的數據刷盤?物理磁盤上。
對于數據的讀取,如果?次讀取?件時出現未命中PageCache的情況,OS從物理磁盤上訪問讀取?件的同時,會順序對其他相鄰塊的數據?件進?預讀取。

那在讀寫的時候要比直接讀取磁盤要快的多,這個做的性能優化。
除了這樣一個性能優化還做了一個事情叫做順序的讀寫,OS從物理磁盤上訪問讀取?件的同時,會順序對其他相鄰塊的數據?件進?預讀取。這樣的話也能夠將速度有個很大的提升。順序讀寫和隨機讀寫性能是相差很大的。
比如還有0拷貝這塊
store里面還會有一些文件
[root@localhost store]# ls  -l
total 8
-rw-r--r--. 1 root root    0 Sep 18  2024 abort
-rw-r--r--. 1 root root 4096 Aug 17 15:49 checkpoint
drwxr-xr-x. 2 root root   34 Sep 27  2024 commitlog
drwxr-xr-x. 2 root root  246 Aug 17 15:50 config
drwxr-xr-x. 3 root root   23 Sep 22  2024 consumequeue
drwxr-xr-x. 2 root root   31 Nov 24  2024 index
-rw-r--r--. 1 root root    4 Nov 24  2024 lock

abort文件,這個abort文件大小是0,當broker啟動的時候會去創建這個abort文件。當broker在正常關閉的時候,abort文件會被刪除掉。

當broker在啟動的時候發現在store里面有這個abort文件,那么意味著上一次是非正常關閉,所以會配有相應的機制去做一些偏移量,配置的檢查。所以這是abort文件的一些作用。

config文件下面的json文件,比如topic的信息會被保存到topics文件里面。比如topics是用來保存topic的一些信息。

在控制臺展示的數據其實也是從這些json文件里面讀取到的。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95769.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95769.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95769.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

輾轉相除法(歐幾里得算法)的證明

歡迎訪問我的主頁: https://heeheeaii.github.io/ 輾轉相除法是一種用于計算兩個非負整數最大公約數的有效算法。它的證明主要分為兩個部分: 證明核心引理: gcd(a,b)gcd(b,amodb)證明算法的收斂性: 證明算法一定會在有限步內結束。 輾轉相除法…

RL【3】:Bellman Optimality Equation

系列文章目錄 文章目錄系列文章目錄前言Definition of optimal policyBellman optimality equationIntroductionMaximization on the right-hand sideContraction mapping theoremSolutionOptimalityAnalyzing optimal policies總結前言 本系列文章主要用于記錄 B站 趙世鈺老師…

有序數組,距離目標最近的k個數 二分查找

🤔 新手做題思路:第1步:理解題目- 找距離x最近的k個數- 數組已排序- 返回結果也要排序(升序)- 距離相同時,選擇較小的數第2步:關鍵insight- 數組已排序 → 考慮二分查找- 最近的k個數一定是連續…

學習心得分享

我認為知識是一定要系統化的學習,結構化梳理,這樣在運用或思考的時候,能夠回憶起自己在這一塊梳理的知識結構,如果有記錄那么能快速回憶并理解,如果沒有記錄,那么說明對自己來說超綱了,把知識進…

為什么說 Linode 和 DigitalOcean 的差距,不止于 VPS?

在今天這個全球化的商業戰場上,中國企業的出海已從“選擇題”變為“必答題”。當我們滿懷雄心,將產品和業務推向海外市場時,基礎設施的選擇,往往是決定成敗的第一步。它不僅關乎成本與性能,更直接影響著團隊的開發效率…

NSSCTF每日一題_Web_[SWPUCTF 2022 新生賽]奇妙的MD5

為了保持做題的感覺和持續學習,也就有了每日一題系列,選一些有意義的題目或者一些CTF新穎題目作為參考學習。[SWPUCTF 2022 新生賽]奇妙的MD51. 訪問首頁界面并進行分析估計題目MD5提示,查詢得知ffifdyop 這個字符串是一個奇妙的MD5字符串因為將“ffifdy…

服務器IP暴露被攻擊了怎么辦?

當服務器IP暴露后,可能會面臨各種網絡攻擊,如DDoS攻擊、端口掃描、惡意入侵等,這將嚴重影響服務器的正常運行和數據安全。本文將從檢測攻擊類型、采取緊急防護措施、優化服務器配置、尋求專業支持以及預防未來攻擊五個方面,詳細探…

TDengine 時間函數 TIMETRUNCATE 用戶手冊

TDengine TIMETRUNCATE 函數用戶使用手冊 函數概述 TIMETRUNCATE 是 TDengine 中的一個時間處理標量函數,用于將時間戳按照指定的時間單位進行截斷操作。該函數在時間數據聚合、分組和統計分析中非常有用,特別適用于智能電表等時序數據的分析場景。 語…

Linux電腦怎樣投屏到客廳的大電視?支持遠程投屏嗎?

一般的電腦投屏軟件都會推出Windows版本和macOS版本,雖然這兩個版本已經覆蓋大部分消費者的常用電腦,但是依然有一部分群體因為電腦系統版本問題不能使用投屏軟件。 如果你當前使用的是Linux系統的電腦,而且又要將電腦投屏投屏到客廳的大電視…

MP4視頻太大如何壓縮?分享6種簡單便捷的壓縮小技巧

隨著拍攝高清視頻的設備越來越多,我們經常會遇到MP4視頻文件體積過大的問題,無論是上傳到社交平臺、發送給朋友,還是存儲在設備中,過大的視頻文件都會帶來諸多不便。那么,MP4視頻太大怎么壓縮呢?本文將介紹…

k8s 部署 redis

創建部署文件 vim redis.yaml添加如下內容: apiVersion: v1 kind: Namespace metadata:name: redis --- apiVersion: v1 kind: Secret metadata:name: redis-passwordnamespace: redis type: Opaque data:password: d2d3cmhnZWE # 建議生產環境使用更復雜的密碼 ---…

FFMPEG H264

一、H264壓縮編碼1.1 H264 中的 I 幀、P幀和 B幀H264 使用幀內壓縮和幀間壓縮的方式提高編碼壓縮率;H264 采用了獨特的 I 幀、P 幀和 B 幀策略來實現,連續幀之間的壓縮;1.2 其他概念GOP(圖像組):一個IDR幀到…

Unity 解決天空盒中間出現一條線

問題解決找到天空盒對應貼圖,在Inspector 面板中找到Advanced →Generate Mip Maps 并取消勾選即可。效果動態修改天空盒RenderSettings.skybox targetSkyboxMaterial; DynamicGI.UpdateEnvironment();

Python爬蟲實戰:研究Showcase模塊,構建電商平臺銷售數據采集和分析系統

1. 引言 1.1 研究背景 在數字經濟快速發展的今天,電商平臺積累了海量的商品信息、交易數據和用戶反饋,這些數據蘊含著豐富的市場洞察。根據中國電子商務研究中心數據,2024 年我國網絡零售市場規模突破 15 萬億元,平臺商品數據呈現指數級增長。如何高效提取這些數據并轉化…

C++中的Reactor和Proactor模型進行系統性解析

<摘要> 本解析系統闡述了網絡編程中Reactor與Proactor兩種高性能I/O模型的核心概念。Reactor基于同步I/O多路復用&#xff0c;通過事件循環分發通知&#xff0c;由應用層自行完成I/O操作&#xff1b;而Proactor則基于異步I/O&#xff0c;由操作系統完成I/O操作后主動回調…

【技術教程】如何將文檔編輯器集成至基于Node.js的網頁應用程序中

當今數字化時代&#xff0c;Web應用對在線文檔編輯的需求日益增長。無論是構建在線辦公系統、內容管理平臺還是協作工具&#xff0c;讓用戶能夠直接在瀏覽器中編輯和處理文檔已成為基本需求。 想知道如何為你的 Node.js 應用添加強大的在線文檔編輯功能嗎&#xff1f;本文手把…

[論文閱讀] 人工智能 + 軟件工程 | 別讓AI寫的代碼帶“漏洞”!無觸發投毒攻擊的防御困境與啟示

別讓AI寫的代碼帶“漏洞”&#xff01;無觸發投毒攻擊的防御困境與啟示 論文信息 原標題&#xff1a;Evaluating Defenses Against Trigger-Free Data Poisoning Attacks on NL-to-Code Models&#xff08;評估NL-to-Code模型應對無觸發數據投毒攻擊的防御方法&#xff09;主要…

【Windows】通過 runas 命令實現多用戶權限測試的完整流程

? 目錄 ?&#x1f6eb; 導讀需求1?? 前期準備&#xff1a;創建管理員/普通測試用戶1.1 創建普通用戶Test&#xff08;無管理員權限&#xff09;1.2 創建管理員用戶Admin&#xff08;含管理員權限&#xff09;2?? 核心操作&#xff1a;通過runas命令切換用戶命令行環境2.1…

新后端漏洞(上)- H2 Database Console 未授權訪問

漏洞介紹&#xff1a; H2 database是一款Java內存數據庫&#xff0c;多用于單元測試。 H2 database自帶一個Web管理頁面&#xff0c;在Spirng開發中&#xff0c;如果我們設置如下選項&#xff0c;即可允許外部用戶訪問Web管理頁面&#xff0c;且沒有鑒權&#xff1a; spring.h2…

2025-09-04 HTML3——區塊布局與表單

文章目錄1 塊元素與行內元素1.1 塊元素 (Block-level Element)1.2 行內元素 (Inline Element)2 HTML 布局2.1 使用 <div> 元素2.2 使用 <table> 元素3 表單 (<form>)3.1 輸入域&#xff08;<input>&#xff09;3.1.1 文本域&#xff08;Text Fields&am…