kafka高性能io的秘密

之前在項(xiàng)目中用到了kafka做消息傳遞拖陆,一直聽說過kafka的性能非常高障本,這里總結(jié)下kafka為了實(shí)現(xiàn)高性能io的做了哪些設(shè)計(jì)用了什么方式教届。以對(duì)自己今后進(jìn)行高性能服務(wù)設(shè)計(jì)作參考。

1.批量消息處理

kafka服務(wù)端在處理消息的時(shí)候驾霜,并不是生產(chǎn)者發(fā)送一條消息它處理一條案训,而是先攢一批消息然后一并進(jìn)行處理,而且在之后的消息刷盤和發(fā)送給消費(fèi)者粪糙,消息都是以一批的形式進(jìn)行處理强霎。這樣的好處就是可以明顯降低請(qǐng)求數(shù),緩解broker的壓力蓉冈,提高處理效率城舞,但是也存在消息發(fā)送不及時(shí)的缺點(diǎn),即這種方式適用于對(duì)實(shí)時(shí)性要求不是特別高的系統(tǒng)

2.順序磁盤io

眾所周知磁盤io涉及到磁盤機(jī)械臂的機(jī)械運(yùn)動(dòng)寞酿,性能本身就不算特別高家夺,如果還是隨機(jī)磁盤io操作的話,性能就會(huì)大大降低伐弹,但是為了持久化消息以保證消息不丟失拉馋,又必須將消息寫入磁盤,所以這里kafka在往磁盤上寫消息時(shí)都是順序?qū)懖液茫粋€(gè)文件寫滿了再開啟一個(gè)新的文件繼續(xù)寫煌茴,這樣順序io就避免了隨機(jī)io需要先尋址再進(jìn)行讀寫導(dǎo)致的性能低下,消費(fèi)的時(shí)候讀消息也是從某個(gè)位置開始順序讀出來日川。

3.利用PageCache緩存

上面提到了磁盤io的性能很低蔓腐,而才內(nèi)存中進(jìn)行讀寫則非常快逗鸣,而kafka就利用了操作系統(tǒng)中的PageCache技術(shù)來利用內(nèi)存加速消息的讀寫合住。PageCache是大部分操作系統(tǒng)都有的特性,即我們?cè)谄綍r(shí)程序中對(duì)磁盤里的文件進(jìn)行讀寫時(shí)撒璧,并不是直接對(duì)磁盤進(jìn)行操作透葛,操作系統(tǒng)會(huì)將文件的一部分拷貝到內(nèi)存中,我們則是對(duì)內(nèi)存中的緩存進(jìn)行讀寫卿樱,然后PageCache再一批一批將內(nèi)存中的修改寫入磁盤僚害。

而在PageCache中進(jìn)行讀寫有兩種情況,一種是PageCache中有數(shù)據(jù),則可以直接進(jìn)行讀寫萨蚕,第二種是沒有數(shù)據(jù)靶草,則此時(shí)會(huì)發(fā)生一次缺頁中斷,操作系統(tǒng)會(huì)進(jìn)行一次磁盤io將文件內(nèi)容讀到PageCache中岳遥,一般來說應(yīng)用程序用過的PageCache不會(huì)立刻被操作系統(tǒng)清理奕翔,而是會(huì)使用LRU算法后續(xù)慢慢清理。而kafka由于一般剛寫入的消息基本上會(huì)立刻被消費(fèi)浩蓉,所以PageCache的命中率非常高派继,非常好的利用到了PageCache的特性。

4.零拷貝技術(shù)

一般來說一條消息從文件讀出來發(fā)送到消費(fèi)者是這樣一個(gè)流程:

a.讀取文件中的消息到內(nèi)存

b.將內(nèi)存中的消息發(fā)送到網(wǎng)絡(luò)端

而在這個(gè)過程中2-3次數(shù)據(jù)拷貝捻艳,比如從文件讀到PageCache中(如果命中PageCache則不用這步操作)驾窟,從PageCache拷貝到應(yīng)用程序內(nèi)存空間,從內(nèi)存空間拷貝到socket緩沖區(qū)认轨,而kakfa利用系統(tǒng)中的一個(gè)系統(tǒng)調(diào)用绅络,直接將消息從PageCache拷貝到socket中,減少一次數(shù)據(jù)拷貝嘁字,而且這種方式不用拷貝到應(yīng)用程序的內(nèi)存空間恩急,dma控制器可以直接完成數(shù)據(jù)復(fù)制,速度更快

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拳锚,一起剝皮案震驚了整個(gè)濱河市假栓,隨后出現(xiàn)的幾起案子寻行,更是在濱河造成了極大的恐慌霍掺,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拌蜘,死亡現(xiàn)場(chǎng)離奇詭異杆烁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)简卧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門兔魂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人举娩,你說我怎么就攤上這事析校。” “怎么了铜涉?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵智玻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我芙代,道長(zhǎng)吊奢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任纹烹,我火速辦了婚禮页滚,結(jié)果婚禮上召边,老公的妹妹穿的比我還像新娘。我一直安慰自己裹驰,他們只是感情好隧熙,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著幻林,像睡著了一般贱鼻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上滋将,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天邻悬,我揣著相機(jī)與錄音,去河邊找鬼随闽。 笑死父丰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的掘宪。 我是一名探鬼主播蛾扇,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼魏滚!你這毒婦竟也來了镀首?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤鼠次,失蹤者是張志新(化名)和其女友劉穎更哄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腥寇,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡成翩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赦役。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麻敌。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖掂摔,靈堂內(nèi)的尸體忽然破棺而出术羔,到底是詐尸還是另有隱情,我是刑警寧澤乙漓,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布级历,位于F島的核電站,受9級(jí)特大地震影響簇秒,放射性物質(zhì)發(fā)生泄漏鱼喉。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扛禽。 院中可真熱鬧锋边,春花似錦、人聲如沸编曼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掐场。三九已至往扔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熊户,已是汗流浹背萍膛。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嚷堡,地道東北人蝗罗。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蝌戒,于是被迫代替她去往敵國(guó)和親串塑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354