08-Kafka如何實現(xiàn)高性能IO组砚?

Kafka如何實現(xiàn)高性能IO?

一利职、使用批量消息提升服務端處理能力

雖然kafka的sdk提供了單條消息發(fā)送趣效,但實際上,Kafka 的客戶端 SDK 在實現(xiàn)消息發(fā)送邏輯的時候猪贪,采用了異步批量發(fā)送的機制跷敬;

當你調(diào)用 send() 方法發(fā)送一條消息之后,無論你是同步發(fā)送還是異步發(fā)送热押,Kafka 都不會立即就把這條消息發(fā)送出去西傀。它會先把這條消息斤寇,存放在內(nèi)存中緩存起來,然后選擇合適的時機把緩存中的所有消息組成一批拥褂,一次性發(fā)給 Broker

在 Kafka 的服務端批消息都不會被解開娘锁,一直是作為一條“批消息”來進行處理的

在消費時,消息同樣是以批為單位進行傳遞的饺鹃,Consumer 從 Broker 拉到一批消息后莫秆,在客戶端把批消息解開,再一條一條交給用戶代碼處理

二悔详、使用順序讀寫提升磁盤 IO 性能

順序讀寫相比隨機讀寫省去了大部分的尋址時間镊屎,它只要尋址一次,就可以連續(xù)地讀寫下去茄螃,所以說缝驳,性能要比隨機讀寫要好很多

Kafka 就是充分利用了磁盤的這個特性。它的存儲設計非常簡單归苍,對于每個分區(qū)用狱,它把從 Producer 收到的消息,順序地寫入對應的 log 文件中霜医,一個文件寫滿了齿拂,就開啟一個新的文件這樣順序?qū)懴氯ァOM的時候肴敛,也是從某個全局的位置開始署海,也就是某一個 log 文件中的某個位置開始,順序地把消息讀出來

三医男、利用緩存頁PageCache加速消息讀寫

PageCache

PageCache 是現(xiàn)代操作系統(tǒng)都具有的一項基本特性砸狞。通俗地說,PageCache 就是操作系統(tǒng)在內(nèi)存中給磁盤上的文件建立的緩存镀梭。無論我們使用什么語言編寫的程序刀森,在調(diào)用系統(tǒng)的 API 讀寫文件的時候,并不會直接去讀寫磁盤上的文件报账,應用程序?qū)嶋H操作的都是 PageCache研底,也就是文件在內(nèi)存中緩存的副本。

應用程序?qū)懭胛募?/p>

操作系統(tǒng)會先把數(shù)據(jù)寫入到內(nèi)存中的 PageCache透罢,然后再一批一批地寫到磁盤上

應用程序讀取文件

有兩種情況:一種是 PageCache 中有數(shù)據(jù)榜晦,那就直接讀取羽圃;另一種情況是乾胶,PageCache 中沒有數(shù)據(jù),這時候操作系統(tǒng)會引發(fā)一個缺頁中斷,應用程序的讀取線程會被阻塞识窿,操作系統(tǒng)把數(shù)據(jù)從文件中復制到 PageCache 中斩郎,然后應用程序再從 PageCache 中繼續(xù)把數(shù)據(jù)讀出來,這時會真正讀一次磁盤上的文件喻频,這個讀的過程就會比較慢缩宜。

PageCache清理機制

用戶的應用程序在使用完某塊 PageCache 后,操作系統(tǒng)并不會立刻就清除這個 PageCache半抱,而是盡可能地利用空閑的物理內(nèi)存保存這些 PageCache脓恕,除非系統(tǒng)內(nèi)存不夠用,操作系統(tǒng)才會清理掉一部分 PageCache窿侈。清理的策略一般是 LRU 或它的變種算法,它保留 PageCache 的邏輯是:優(yōu)先保留最近一段時間最常使用的那些 PageCache

kafka讀寫消息文件

kafka充分利用了 PageCache 的特性秋茫。一般來說史简,消息剛剛寫入到服務端就會被消費,按照 LRU 的“優(yōu)先清除最近最少使用的頁”這種策略肛著,讀取的時候圆兵,對于這種剛剛寫入的 PageCache,命中的幾率會非常高枢贿。也就是說殉农,大部分情況下,kafka消費讀消息都會命中 PageCache局荚,帶來的好處有兩個:一個是讀取的速度會非吵剩快,另外一個是耀态,給寫入消息讓出磁盤的 IO 資源轮傍,間接也提升了寫入的性能。

四首装、ZeroCopy:零拷貝技術(shù)

在消息服務端處理消費的大致過程:

  • 1创夜、從文件中找到消息數(shù)據(jù),讀到內(nèi)存中仙逻;
  • 2驰吓、把消息通過網(wǎng)絡發(fā)給客戶端。

這個過程中系奉,數(shù)據(jù)實際上做了 2 次或者 3 次復制:

  • 1檬贰、從文件復制數(shù)據(jù)到 PageCache 中,如果命中 PageCache喜最,這一步可以省掉偎蘸;
  • 2、從 PageCache 復制到應用程序的內(nèi)存空間中,也就是我們可以操作的對象所在的內(nèi)存迷雪;
  • 3限书、從應用程序的內(nèi)存空間復制到 Socket 的緩沖區(qū),這個過程就是我們調(diào)用網(wǎng)絡應用框架的 API 發(fā)送數(shù)據(jù)的過程章咧。

Kafka 使用零拷貝技術(shù)可以把這個復制次數(shù)減少一次倦西,上面的 2、3 步驟兩次復制合并成一次復制赁严。直接從 PageCache 中把數(shù)據(jù)復制到 Socket 緩沖區(qū)中扰柠,這樣不僅減少一次數(shù)據(jù)復制,更重要的是疼约,由于不用把數(shù)據(jù)復制到用戶內(nèi)存空間卤档,DMA 控制器可以直接完成數(shù)據(jù)復制,不需要 CPU 參與程剥,速度更快

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末劝枣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子织鲸,更是在濱河造成了極大的恐慌舔腾,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件搂擦,死亡現(xiàn)場離奇詭異稳诚,居然都是意外死亡,警方通過查閱死者的電腦和手機瀑踢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評論 3 385
  • 文/潘曉璐 我一進店門扳还,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人丘损,你說我怎么就攤上這事普办。” “怎么了徘钥?”我有些...
    開封第一講書人閱讀 158,021評論 0 348
  • 文/不壞的土叔 我叫張陵衔蹲,是天一觀的道長。 經(jīng)常有香客問我呈础,道長舆驶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評論 1 284
  • 正文 為了忘掉前任而钞,我火速辦了婚禮沙廉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘臼节。我一直安慰自己撬陵,他們只是感情好珊皿,可當我...
    茶點故事閱讀 65,792評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巨税,像睡著了一般蟋定。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上草添,一...
    開封第一講書人閱讀 49,985評論 1 291
  • 那天驶兜,我揣著相機與錄音,去河邊找鬼远寸。 笑死抄淑,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的驰后。 我是一名探鬼主播肆资,決...
    沈念sama閱讀 39,107評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灶芝!你這毒婦竟也來了迅耘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,845評論 0 268
  • 序言:老撾萬榮一對情侶失蹤监署,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后纽哥,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體钠乏,經(jīng)...
    沈念sama閱讀 44,299評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,612評論 2 327
  • 正文 我和宋清朗相戀三年春塌,在試婚紗的時候發(fā)現(xiàn)自己被綠了晓避。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,747評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡只壳,死狀恐怖俏拱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情吼句,我是刑警寧澤锅必,帶...
    沈念sama閱讀 34,441評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站惕艳,受9級特大地震影響搞隐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜远搪,卻給世界環(huán)境...
    茶點故事閱讀 40,072評論 3 317
  • 文/蒙蒙 一劣纲、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谁鳍,春花似錦癞季、人聲如沸劫瞳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽志于。三九已至,卻和暖如春辉巡,著一層夾襖步出監(jiān)牢的瞬間恨憎,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評論 1 267
  • 我被黑心中介騙來泰國打工郊楣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留憔恳,地道東北人。 一個月前我還...
    沈念sama閱讀 46,545評論 2 362
  • 正文 我出身青樓净蚤,卻偏偏與公主長得像钥组,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子今瀑,可洞房花燭夜當晚...
    茶點故事閱讀 43,658評論 2 350