在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

把數(shù)據(jù)緩存到文件系統(tǒng)有哪些優(yōu)勢

馬哥Linux運維 ? 來源:稀土掘金技術(shù)社區(qū) ? 2023-12-16 09:57 ? 次閱讀

1 背景

在讀完kafka官方文檔,kafka設(shè)計里的持久化一章后,給我的第一印象是內(nèi)容很抽象,于是草擬和總結(jié)了給個副標題,并把相關(guān)內(nèi)容進行了歸類;有些生澀的句子,盡量用大白話和舉例進行說明,并加入了總結(jié)。

2 磁盤IO速度的快和慢,不取決我們的主觀認知,而是由我們的使用方式?jīng)Q定的

kafka 里消息的緩存和存儲,嚴重依賴文件系統(tǒng)。(根據(jù)上下文推測,這里的緩存消息和存儲消息,指的是broker端 緩存和存儲消息)

在我們普遍的認知里,都覺得“磁盤IO速度是非常慢的”,這種固有的觀點,使得人們懷疑持久性結(jié)構(gòu)是否能夠提供競爭性的性能。

(和其它MQ中間件相對,你把數(shù)據(jù) 存入到磁盤上,還有性能上的優(yōu)勢嗎?)

但實際上,磁盤速度,取決于他們的使用方式,設(shè)計得當?shù)拇疟P結(jié)構(gòu)往往可以和網(wǎng)絡(luò)一樣快。

從順序?qū)憯?shù)據(jù)到磁盤的角度分析 ------順序?qū)懘疟P,比隨機訪問內(nèi)存的速度還快

事實上 關(guān)于磁盤性能,在過去十年中,硬盤驅(qū)動器的吞吐量與磁盤尋道的延遲一直存在差異。

在具有六個 7200rpm SATA RAID-5 陣列的 JBOD 配置上,線性寫入性能約為 600MB/秒,但隨機寫入性能僅為約 100k/秒,相差超過 6000 倍。

這些線性讀取和寫入是所有使用模式中最可預(yù)測的,并且經(jīng)過操作系統(tǒng)的大力優(yōu)化。現(xiàn)代操作系統(tǒng)提供預(yù)讀和后寫技術(shù),以大塊倍數(shù)預(yù)取數(shù)據(jù),并將較小的邏輯寫入分組為較大的物理寫入。

有關(guān)此問題的進一步討論可以在這篇 ACM Queue 文章中找到;他們實際上發(fā)現(xiàn)順序磁盤訪問在某些情況下比隨機內(nèi)存訪問更快!如下圖所示:

c0be9d1c-9b45-11ee-8b88-92fbcf53809c.jpg

從磁盤讀寫數(shù)據(jù)的角度 ------使用磁盤緩存,加速磁盤讀寫速度

為了彌補這種性能差異,現(xiàn)代操作系統(tǒng)在使用主內(nèi)存進行磁盤緩存方面變得越來越積極。

現(xiàn)代操作系統(tǒng)將所有空閑內(nèi)存快樂地用于磁盤緩存,當內(nèi)存被回收時幾乎沒有性能損失。

所有磁盤讀寫都將通過這個統(tǒng)一緩存進行。

這個特性很難關(guān)閉,即使進程在進程內(nèi)保持數(shù)據(jù)緩存,這些數(shù)據(jù)也可能會在OS頁面緩存中重復(fù)存儲,實際上將所有東西存儲兩次。

(日常 數(shù)據(jù)在寫入磁盤時,并沒有刷新到磁盤上,只是寫到了磁盤緩存里,而磁盤緩存其實是操作系統(tǒng)的主內(nèi)存;即把數(shù)據(jù)寫入文件的時候,其實還是寫到內(nèi)存中)

圖 kafka broker端 數(shù)據(jù)寫入過程

c0db9a66-9b45-11ee-8b88-92fbcf53809c.jpg

kafka在寫入數(shù)據(jù)到文件系統(tǒng)時,同步寫入到pagecache,異步刷新并持久化到磁盤里。

3 把數(shù)據(jù)緩存到JVM有哪些劣勢了?

kafka構(gòu)建在JVM之上,任何花費過時間了解過 Java內(nèi)存使用的人都知道兩件事:

對象的內(nèi)存開銷很高,通常會使存儲的數(shù)據(jù)大小翻倍(或更糟)。(即原數(shù)據(jù)可能只有1K大小,但是轉(zhuǎn)換為java對象,可能要3K)

隨著堆內(nèi)數(shù)據(jù)的增加,Java垃圾回收變得越來越繁瑣和慢。(jvm里緩存的數(shù)據(jù),會放到堆內(nèi)存中;隨這數(shù)據(jù)越來越多,達到GC的臨界點會越來越快,導(dǎo)致GC越來越頻繁 ;這樣就會導(dǎo)致系統(tǒng)會把資源用于GC,而不是業(yè)務(wù)處理了)

4 把數(shù)據(jù)緩存到文件系統(tǒng)有哪些優(yōu)勢了?

使用文件系統(tǒng)并依賴頁面緩存方式,比維護內(nèi)存中緩存或其他結(jié)構(gòu)要更優(yōu) 。主要原因:

相對于把數(shù)據(jù)緩存到j(luò)vm中,直接使用操作系統(tǒng)頁面緩存,可讓程序能使用的緩存加倍。(因為jvm 對象的內(nèi)存開銷很高,他會膨脹。1K的數(shù)據(jù)放入到頁面緩存還是1K;但是轉(zhuǎn)換為JVM對象,可能就占用了3K空間)

把消息數(shù)據(jù)使用字節(jié)結(jié)構(gòu)并且壓縮的方式進行存儲,比單個對象的存儲更節(jié)約空間,并且還可能進一步帶來緩存內(nèi)存的加倍使用。

這樣做即使在 32GB 機器上也可產(chǎn)生高達 28-30GB 的緩存,而不會造成 GC 損失。(---即使緩存中的數(shù)據(jù)變大,也不會帶來頻繁的GC)

即使kafka 服務(wù)重新啟動,此緩存也將保持熱狀態(tài)。(頁面緩存中數(shù)據(jù)還在,因為kafka進程重新,而操作系統(tǒng)可能不會重啟) 而如果把數(shù)據(jù)放入到進程內(nèi)緩存,kafka服務(wù)重啟時將需要在內(nèi)存中重建(對于 10GB 緩存可能需要 10 分鐘),否則它將需要以完全冷的緩存啟動 (這可能意味著糟糕的初始性能)。

極大地簡化了代碼,因為用于維護緩存和文件系統(tǒng)之間一致性的所有邏輯現(xiàn)在都在操作系統(tǒng)中,這往往比一次性進程內(nèi)嘗試更有效、更正確。

如果您的磁盤使用有利于順序讀取的方式,那么操作系統(tǒng)的預(yù)讀實際上是在每次磁盤讀取時使用有用的數(shù)據(jù)預(yù)先填充此緩存。

(這里涉及到操作系統(tǒng)讀取磁盤上的數(shù)據(jù)時的一種優(yōu)化---預(yù)讀。即往磁盤里讀一行數(shù)據(jù),操作系統(tǒng)實際上是把這一行數(shù)據(jù),和他后面的5K數(shù)據(jù),都會一次性讀出來,放入到緩存里。這對于kafka這種順序消費消息的模式,非常適用,因為多讀出來的數(shù)據(jù),其實在后續(xù)消費的時候,是需要的,這避免了重復(fù)從硬盤多次讀取數(shù)據(jù),非常類似于一次性加載大塊的數(shù)據(jù)到內(nèi)存中;然后還沒有浪費內(nèi)存空間,因為這些數(shù)據(jù)后續(xù)馬上也是需要被消費者消費的)

5 kafka 以文件系統(tǒng)進行存儲和緩存的設(shè)計建議

我們不是在內(nèi)存中保留盡可能多的內(nèi)容,而是在空間不足時將其全部刷新到文件系統(tǒng),而是將其反轉(zhuǎn)。所有數(shù)據(jù)都會立即寫入文件系統(tǒng)上的持久日志,而不必刷新到磁盤。實際上,這僅僅意味著它被轉(zhuǎn)移到內(nèi)核的頁面緩存中

(我們不會把數(shù)據(jù) 緩存到j(luò)vm進程內(nèi)存里,當空間不足時,再刷新到緩存里;而是采用了相反的方式:即所有數(shù)據(jù)會立即寫入到文件系統(tǒng)里,即磁盤緩存里(即頁緩存里),但不會寫入后馬上刷新數(shù)據(jù)到磁盤里)

============以下為個人總結(jié)和觀點==============

6 kafka 這種同步寫文件緩存,異步順序刷新數(shù)據(jù)到磁盤的方式就不怕,操作系統(tǒng)掛了,數(shù)據(jù)會丟失嗎?

如果page cache在持久化到磁盤前,broker進程宕機了,這個時候不會丟失消息,重啟broker即可;如果此時操作系統(tǒng)宕機或者物理機宕機了,page cache里的數(shù)據(jù)還沒有持久化到磁盤里,此種情況數(shù)據(jù)就丟了。

kafka應(yīng)對此種情況,建議是通過多副本機制來解決的,核心思想也挺簡單的:如果數(shù)據(jù)保存在一臺機器上你覺得可靠性不夠,那么我就把相同的數(shù)據(jù)保存到多臺機器上,某臺機器宕機了可以由其它機器提供相同的服務(wù)和數(shù)據(jù)。 更加詳細的配置 請看《kafka 消息“零丟失”的配方》 broker端丟失消息的情況和解決方法一節(jié)

7 那能不能自己控制這個數(shù)據(jù)刷盤行為了?

可以的,在kafka的官方配置文檔里有兩個參數(shù):

log.flush.interval.messages 和 log.flush.interval.ms

一個控制消息量達到了多少,一個控制間隔時間多少;會把頁緩存里消息刷新到磁盤里;但這個控制刷盤行為也是異步的

8 總結(jié)

1、kafka broker端會把文件系統(tǒng),做為消息緩存和存儲;因為操作系統(tǒng)在寫數(shù)據(jù)到磁盤時,已進行了優(yōu)化

2、kafka broker 在寫入數(shù)據(jù)到文件系統(tǒng)時,同步寫入到磁盤緩存里(即內(nèi)存里),異步把緩存中的數(shù)據(jù)寫入到磁盤里。這是kafka 寫數(shù)據(jù)到文件系統(tǒng)高效的主要原因,也是核心業(yè)務(wù) 寫數(shù)據(jù)主流程 高效的主原因;異步順序刷新數(shù)據(jù)到磁盤里,我覺得是性能高的次要原因,畢竟不阻塞到主流程

3、kafka 作為消息系統(tǒng),天生就是順序?qū)懭霐?shù)據(jù)到文件系統(tǒng),并順序讀取文件系統(tǒng)的,這種天然的順序性,恰好可以利用操作系統(tǒng)的預(yù)讀功能:即一次磁盤IO 讀取數(shù)據(jù)時,會把數(shù)據(jù)附近其他磁盤數(shù)據(jù)也讀寫到內(nèi)存中;下一次讀取下一條消息時,不需要磁盤IO了,直接從內(nèi)存中獲取數(shù)據(jù),減少磁盤IO 這種非常慢的讀取次數(shù),加速取數(shù)過程。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 存儲
    +關(guān)注

    關(guān)注

    13

    文章

    4502

    瀏覽量

    87065
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    3108

    瀏覽量

    74987
  • 磁盤
    +關(guān)注

    關(guān)注

    1

    文章

    388

    瀏覽量

    25655
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    578

    瀏覽量

    25204
  • kafka
    +關(guān)注

    關(guān)注

    0

    文章

    53

    瀏覽量

    5361

原文標題:為什么kafka使用磁盤文件來緩存和存儲消息

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點推薦

    如何文件系統(tǒng)燒到EMMC并從EMMC加載

    如何下載并從SD卡加載文件系統(tǒng),提到過可以從EMMC引導(dǎo)系統(tǒng),本篇將為您介紹如何文件系統(tǒng)燒到EMMC,并從EMMC加載。
    的頭像 發(fā)表于 10-30 16:06 ?3785次閱讀
    如何<b class='flag-5'>把</b><b class='flag-5'>文件系統(tǒng)</b>燒到EMMC并從EMMC加載

    談?wù)勈裁词?b class='flag-5'>文件系統(tǒng) 文件系統(tǒng)的功能與特點

    文件系統(tǒng)的應(yīng)用非常廣泛,同時種類也是特別的多,并且不同平臺也會使用不同性能和特點的文件系統(tǒng),比如查找效率、數(shù)據(jù)安全等級等等,如下面windows使用的NTFS:
    發(fā)表于 08-30 09:50 ?3706次閱讀
    談?wù)勈裁词?b class='flag-5'>文件系統(tǒng)</b> <b class='flag-5'>文件系統(tǒng)</b>的功能與特點

    Linux文件系統(tǒng)課程

    本章學(xué)習(xí)目標理解什么是文件系統(tǒng)了解文件系統(tǒng)工作原理理解Fedora Core Linux文件系統(tǒng)的結(jié)構(gòu)掌握Fedora Core Linux文件系統(tǒng)的類型、權(quán)限和修改方法掌握如何安裝、
    發(fā)表于 04-10 17:07 ?0次下載

    NTFS文件系統(tǒng),NTFS文件系統(tǒng)是什么意思

    NTFS文件系統(tǒng),NTFS文件系統(tǒng)是什么意思 NTFS是Windows NT以及之后的Windows 2000、Windows XP、Windows Server 2003、Windows Server 2008
    發(fā)表于 03-29 10:38 ?6151次閱讀

    XfS文件系統(tǒng),XfS文件系統(tǒng)是什么意思

    XfS文件系統(tǒng),XfS文件系統(tǒng)是什么意思 XfS文件系統(tǒng)是SGI開發(fā)的高級日志文件系統(tǒng),XFS極具伸縮性,非常健壯。所幸的是SGI將其移植到了Lin
    發(fā)表于 03-29 10:39 ?4349次閱讀

    Ceph文件系統(tǒng)數(shù)據(jù)緩存備份

    針對Ceph文件系統(tǒng)數(shù)據(jù)寫操作響應(yīng)時間較長的問題,提出一種對元數(shù)據(jù)緩存進行備份的方案。該方案采用多個元數(shù)據(jù)服務(wù)器之間互相備份寫
    發(fā)表于 02-08 15:38 ?0次下載
    Ceph<b class='flag-5'>文件系統(tǒng)</b>的<b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>緩存</b>備份

    文件系統(tǒng)是什么?淺談EXT文件系統(tǒng)歷史

    在先前關(guān)于Linux文件系統(tǒng)的文章中,我很想去深入地討論更多EXT文件系統(tǒng)的特性的信息。所以,首先讓我們來回答這個問題:什么是文件系統(tǒng)?一個文件系統(tǒng)應(yīng)該遵循以下特點。
    發(fā)表于 06-28 09:03 ?5925次閱讀
    <b class='flag-5'>文件系統(tǒng)</b>是什么?淺談EXT<b class='flag-5'>文件系統(tǒng)</b>歷史

    linux文件系統(tǒng)中的虛擬文件系統(tǒng)設(shè)計詳解

    ;更進一步,對文件的 操作可以跨文件系統(tǒng)而執(zhí)行。如圖 1 所示,我們可以使用 cp 命令從 vfat 文件系統(tǒng)格式的硬盤拷貝數(shù)據(jù)到 ext3 文件系
    發(fā)表于 04-02 14:37 ?2022次閱讀
    linux<b class='flag-5'>文件系統(tǒng)</b>中的虛擬<b class='flag-5'>文件系統(tǒng)</b>設(shè)計詳解

    xv6的文件系統(tǒng)是如何實現(xiàn)的

    文件系統(tǒng) 本文繼續(xù)來看 的文件系統(tǒng)部分, 將文件系統(tǒng)的設(shè)計分為 7 層: ,磁盤、緩存區(qū)、日志三個部分在前文已經(jīng)說了,本文接著講述 ,目錄,路徑三個層次。 這部分的理論知識可以參考文章
    的頭像 發(fā)表于 10-12 18:00 ?2716次閱讀
     xv6的<b class='flag-5'>文件系統(tǒng)</b>是如何實現(xiàn)的

    FATFS文件系統(tǒng)詳解

    一、文件系統(tǒng)負責(zé)管理和存儲文件信息的軟件機構(gòu)稱為文件管理系統(tǒng),簡稱文件系統(tǒng)。即在磁盤上組織文件
    發(fā)表于 11-29 09:51 ?30次下載
    FATFS<b class='flag-5'>文件系統(tǒng)</b>詳解

    Linux的文件系統(tǒng)文件緩存的知識點

    文件系統(tǒng)的特點 文件系統(tǒng)要有嚴格的組織形式,使得文件能夠以塊為單位進行存儲。 文件系統(tǒng)中也要有索引區(qū),用來方便查找一個文件分成的
    的頭像 發(fā)表于 02-13 13:52 ?1100次閱讀

    適用于Linux的最佳通用文件系統(tǒng) Linux文件系統(tǒng)的安裝

    為您的計算機選擇正確的文件系統(tǒng)可能是一個困難的過程。您可能會想知道:為什么文件系統(tǒng)很重要?有沒有適用于安裝 Linux 的特定文件系統(tǒng)? 事實證明,兩種
    發(fā)表于 08-03 10:22 ?473次閱讀
    適用于Linux的最佳通用<b class='flag-5'>文件系統(tǒng)</b> Linux<b class='flag-5'>文件系統(tǒng)</b>的安裝

    Linux的文件系統(tǒng)特點

    ,近期經(jīng)常被讀取和寫入,文件系統(tǒng)應(yīng)該有緩存層。 文件應(yīng)該用文件夾的形式組織起來,方便管理和查詢。 Linux內(nèi)核要在自己的內(nèi)存里面維護一套數(shù)據(jù)
    的頭像 發(fā)表于 11-09 14:48 ?1525次閱讀
    Linux的<b class='flag-5'>文件系統(tǒng)</b>特點

    華納云:VFS在提升文件系統(tǒng)性能方面的具體實踐

    維護不同的調(diào)用接口。 頁緩存(Page Cache): 許多操作系統(tǒng)使用頁緩存來存儲最近訪問的文件數(shù)據(jù)。VFS通過頁
    的頭像 發(fā)表于 11-27 15:59 ?666次閱讀

    如何正確選擇嵌入式文件系統(tǒng)

    操作系統(tǒng),由于文件系統(tǒng)以及緩存的存在,在數(shù)據(jù)存儲方面的使用注意事項比單片機直接寫存儲器的應(yīng)用會有更多的要求才能達到
    的頭像 發(fā)表于 03-17 11:35 ?432次閱讀
    如何正確選擇嵌入式<b class='flag-5'>文件系統(tǒng)</b>?
    主站蜘蛛池模板: 久久久久久88色偷偷 | 天天草天天爽 | 麒麟色欧美影院在线播放 | 美女色18片黄黄色 | 欧美高清成人videosex | 天天干网站 | 国产精品美女久久久 | 免费一级毛片在线播放 | 亚洲一区二区福利视频 | 玖操在线 | 在线视频资源 | 午夜免费小视频 | 亚洲综合一 | 一级a性色生活片毛片 | 天天做天天爱天天干 | 天天槽天天槽天天槽 | 五月亭亭激情五月 | 国产在线视欧美亚综合 | 68日本 xxxxxxxxx | 亚洲精品久久婷婷爱久久婷婷 | 永久网站色视频在线观看免费 | 欧美乱乱 | 激情六月网| 日本黄色网址大全 | 久久精品亚洲热综合一本奇米 | 最新版天堂中文在线官网 | 亚洲大黑香蕉在线观看75 | 久热网 | 韩彩英三级无删版甜性涩爱 | 久久久综合色 | 中文字幕有码在线视频 | 欧美日韩在线成人看片a | 免费看一级黄色录像 | 亚洲人成电影院在线观看 | 黄色一级片在线观看 | 成人在线免费 | 欧美性色综合网 | 国产高清在线精品一区 | 四虎最新紧急更新地址 | 国产妇女在线 | 精品欧美一区二区三区在线观看 |