欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

Kafka的存儲方法是什么

這篇文章主要介紹“Kafka的存儲方法是什么”,在日常操作中,相信很多人在Kafka的存儲方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Kafka的存儲方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

創(chuàng)新互聯(lián)公司主營湖南網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),湖南h5成都小程序開發(fā)搭建,湖南網(wǎng)站營銷推廣歡迎湖南等地區(qū)企業(yè)咨詢

Kafka 依賴于文件系統(tǒng)(更底層地來說就是磁盤)來存儲和緩存消息。在我們的印象中,對于各個(gè)存儲介質(zhì)的速度認(rèn)知大體同下圖所示的相同,層級越高代表速度越快。很顯然,磁盤處于一個(gè)比較尷尬的位置,這不禁讓我們懷疑 Kafka 采用這種持久化形式能否提供有競爭力的性能。在傳統(tǒng)的消息中間件 RabbitMQ 中,就使用內(nèi)存作為默認(rèn)的存儲介質(zhì),而磁盤作為備選介質(zhì),以此實(shí)現(xiàn)高吞吐和低延遲的特性。然而,事實(shí)上磁盤可以比我們預(yù)想的要快,也可能比我們預(yù)想的要慢,這完全取決于我們?nèi)绾问褂盟?/p>

Kafka的存儲方法是什么

?有關(guān)測試結(jié)果表明,一個(gè)由6塊 7200r/min 的 RAID-5 陣列組成的磁盤簇的線性(順序)寫入速度可以達(dá)到 600MB/s,而隨機(jī)寫入速度只有 100KB/s,兩者性能相差6000倍。操作系統(tǒng)可以針對線性讀寫做深層次的優(yōu)化,比如預(yù)讀(read-ahead,提前將一個(gè)比較大的磁盤塊讀入內(nèi)存)和后寫(write-behind,將很多小的邏輯寫操作合并起來組成一個(gè)大的物理寫操作)技術(shù)。順序?qū)懕P的速度不僅比隨機(jī)寫盤的速度快,而且也比隨機(jī)寫內(nèi)存的速度快,如下圖所示。

Kafka的存儲方法是什么

頁緩存的魅力

Kafka 在設(shè)計(jì)時(shí)采用了文件追加的方式來寫入消息,即只能在日志文件的尾部追加新的消息,并且也不允許修改已寫入的消息,這種方式屬于典型的順序?qū)懕P的操作,所以就算Kafka使用磁盤作為存儲介質(zhì),它所能承載的吞吐量也不容小覷。但這并不是讓 Kafka 在性能上具備足夠競爭力的唯一因素,我們不妨繼續(xù)分析。

頁緩存是操作系統(tǒng)實(shí)現(xiàn)的一種主要的磁盤緩存,以此用來減少對磁盤 I/O 的操作。具體來說,就是把磁盤中的數(shù)據(jù)緩存到內(nèi)存中,把對磁盤的訪問變?yōu)閷?nèi)存的訪問。為了彌補(bǔ)性能上的差異,現(xiàn)代操作系統(tǒng)越來越“激進(jìn)地”將內(nèi)存作為磁盤緩存,甚至?xí)浅芬鈱⑺锌捎玫膬?nèi)存用作磁盤緩存,這樣當(dāng)內(nèi)存回收時(shí)也幾乎沒有性能損失,所有對于磁盤的讀寫也將經(jīng)由統(tǒng)一的緩存。?

當(dāng)一個(gè)進(jìn)程準(zhǔn)備讀取磁盤上的文件內(nèi)容時(shí),操作系統(tǒng)會先查看待讀取的數(shù)據(jù)所在的頁(page)是否在頁緩存(pagecache)中,如果存在(命中)則直接返回?cái)?shù)據(jù),從而避免了對物理磁盤的 I/O 操作;如果沒有命中,則操作系統(tǒng)會向磁盤發(fā)起讀取請求并將讀取的數(shù)據(jù)頁存入頁緩存,之后再將數(shù)據(jù)返回給進(jìn)程。

同樣,如果一個(gè)進(jìn)程需要將數(shù)據(jù)寫入磁盤,那么操作系統(tǒng)也會檢測數(shù)據(jù)對應(yīng)的頁是否在頁緩存中,如果不存在,則會先在頁緩存中添加相應(yīng)的頁,最后將數(shù)據(jù)寫入對應(yīng)的頁。被修改過后的頁也就變成了臟頁,操作系統(tǒng)會在合適的時(shí)間把臟頁中的數(shù)據(jù)寫入磁盤,以保持?jǐn)?shù)據(jù)的一致性。

Linux 操作系統(tǒng)中的 vm.dirty_background_ratio 參數(shù)用來指定當(dāng)臟頁數(shù)量達(dá)到系統(tǒng)內(nèi)存的百分之多少之后就會觸發(fā) pdflush/flush/kdmflush 等后臺回寫進(jìn)程的運(yùn)行來處理臟頁,一般設(shè)置為小于10的值即可,但不建議設(shè)置為0。與這個(gè)參數(shù)對應(yīng)的還有一個(gè) vm.dirty_ratio 參數(shù),它用來指定當(dāng)臟頁數(shù)量達(dá)到系統(tǒng)內(nèi)存的百分之多少之后就不得不開始對臟頁進(jìn)行處理,在此過程中,新的 I/O 請求會被阻擋直至所有臟頁被沖刷到磁盤中。對臟頁有興趣的讀者還可以自行查閱 vm.dirty_expire_centisecs、vm.dirty_writeback.centisecs 等參數(shù)的使用說明。?

對一個(gè)進(jìn)程而言,它會在進(jìn)程內(nèi)部緩存處理所需的數(shù)據(jù),然而這些數(shù)據(jù)有可能還緩存在操作系統(tǒng)的頁緩存中,因此同一份數(shù)據(jù)有可能被緩存了兩次。并且,除非使用 Direct I/O 的方式,否則頁緩存很難被禁止。此外,用過 Java 的人一般都知道兩點(diǎn)事實(shí):對象的內(nèi)存開銷非常大,通常會是真實(shí)數(shù)據(jù)大小的幾倍甚至更多,空間使用率低下;Java 的垃圾回收會隨著堆內(nèi)數(shù)據(jù)的增多而變得越來越慢?;谶@些因素,使用文件系統(tǒng)并依賴于頁緩存的做法明顯要優(yōu)于維護(hù)一個(gè)進(jìn)程內(nèi)緩存或其他結(jié)構(gòu),至少我們可以省去了一份進(jìn)程內(nèi)部的緩存消耗,同時(shí)還可以通過結(jié)構(gòu)緊湊的字節(jié)碼來替代使用對象的方式以節(jié)省更多的空間。如此,我們可以在32GB的機(jī)器上使用28GB至30GB的內(nèi)存而不用擔(dān)心 GC 所帶來的性能問題。

此外,即使 Kafka 服務(wù)重啟,頁緩存還是會保持有效,然而進(jìn)程內(nèi)的緩存卻需要重建。這樣也極大地簡化了代碼邏輯,因?yàn)榫S護(hù)頁緩存和文件之間的一致性交由操作系統(tǒng)來負(fù)責(zé),這樣會比進(jìn)程內(nèi)維護(hù)更加安全有效。

Kafka 中大量使用了頁緩存,這是 Kafka 實(shí)現(xiàn)高吞吐的重要因素之一。雖然消息都是先被寫入頁緩存,然后由操作系統(tǒng)負(fù)責(zé)具體的刷盤任務(wù)的,但在 Kafka 中同樣提供了同步刷盤及間斷性強(qiáng)制刷盤(fsync)的功能,這些功能可以通過 log.flush.interval.messages、log.flush.interval.ms 等參數(shù)來控制。

同步刷盤可以提高消息的可靠性,防止由于機(jī)器掉電等異常造成處于頁緩存而沒有及時(shí)寫入磁盤的消息丟失。不過筆者并不建議這么做,刷盤任務(wù)就應(yīng)交由操作系統(tǒng)去調(diào)配,消息的可靠性應(yīng)該由多副本機(jī)制來保障,而不是由同步刷盤這種嚴(yán)重影響性能的行為來保障。

Linux 系統(tǒng)會使用磁盤的一部分作為 swap 分區(qū),這樣可以進(jìn)行進(jìn)程的調(diào)度:把當(dāng)前非活躍的進(jìn)程調(diào)入 swap 分區(qū),以此把內(nèi)存空出來讓給活躍的進(jìn)程。對大量使用系統(tǒng)頁緩存的 Kafka 而言,應(yīng)當(dāng)盡量避免這種內(nèi)存的交換,否則會對它各方面的性能產(chǎn)生很大的負(fù)面影響。

我們可以通過修改 vm.swappiness 參數(shù)(Linux 系統(tǒng)參數(shù))來進(jìn)行調(diào)節(jié)。vm.swappiness 參數(shù)的上限為100,它表示積極地使用 swap 分區(qū),并把內(nèi)存上的數(shù)據(jù)及時(shí)地搬運(yùn)到 swap 分區(qū)中;vm.swappiness 參數(shù)的下限為0,表示在任何情況下都不要發(fā)生交換(vm.swappiness = 0 的含義在不同版本的 Linux 內(nèi)核中不太相同,這里采用的是變更后的最新解釋),這樣一來,當(dāng)內(nèi)存耗盡時(shí)會根據(jù)一定的規(guī)則突然中止某些進(jìn)程。筆者建議將這個(gè)參數(shù)的值設(shè)置為1,這樣保留了 swap 的機(jī)制而又最大限度地限制了它對 Kafka 性能的影響。

到此,關(guān)于“Kafka的存儲方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

當(dāng)前標(biāo)題:Kafka的存儲方法是什么
文章地址:http://chinadenli.net/article12/pgppdc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、品牌網(wǎng)站制作、企業(yè)網(wǎng)站制作、服務(wù)器托管App設(shè)計(jì)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名