Kafka吞吐量高的原因

這幾天在學習kafka,看了一些書和博文督弓,看到了一篇博文感受頗深(深感大學的課程其實是非常重要的)芦圾,所以這里就把這篇文章精簡一下,順便當給自己鞏固一下知識帝牡。

注:本文如與《寫程序的康德--kafka為什么這么快》有雷同往毡,純屬我抄他的。

眾所周知kafka的吞吐量比一般的消息隊列要高靶溜,號稱the fastest开瞭,那他是如何做到的,讓我們從以下幾個方面分析一下原因罩息。

生產者端

生產者負責寫入數據嗤详,Kafka會將消息持久化到磁盤,保證不會丟失數據瓷炮,Kafka采用了倆個技術提高寫入的速度断楷。

1.順序寫入:在大學的計算機組成(劃重點)里我們學過,硬盤是機械結構崭别,需要指針尋址找到存儲數據的位置冬筒,所以恐锣,如果是隨機IO,磁盤會進行頻繁的尋址舞痰,導致寫入速度下降土榴。Kafka使用了順序IO提高了磁盤的寫入速度,Kafka會將數據順序插入到文件末尾响牛,消費者端通過控制偏移量來讀取消息玷禽,這樣做會導致數據無法刪除,時間一長呀打,磁盤空間會滿矢赁,kafka提供了2種策略來刪除數據:基于時間刪除和基于partition文件的大小刪除。

2.Memory Mapped Files:這個和Java NIO中的內存映射基本相同贬丛,在大學的計算機原理里我們學過(劃重點)撩银,mmf直接利用操作系統(tǒng)的Page來實現文件到物理內存的映射,完成之后對物理內存的操作會直接同步到硬盤豺憔。mmf通過內存映射的方式大大提高了IO速率额获,省去了用戶空間到內核空間的復制。它的缺點顯而易見--不可靠恭应,當發(fā)生宕機而數據未同步到硬盤時抄邀,數據會丟失,Kafka提供了produce.type參數來控制是否主動的進行刷新昼榛,如果kafka寫入到mmp后立即flush再返回給生產者則為同步模式境肾,反之為異步模式。

消費者端

在這之前先來了解一下零拷貝:平時從服務器讀取靜態(tài)文件時胆屿,服務器先將文件從復制到內核空間准夷,再復制到用戶空間,最后再復制到內核空間并通過網卡發(fā)送出去莺掠,而零拷貝則是直接從內核到內核再到網卡,省去了用戶空間的復制读宙。

Kafka把所有的消息存放到一個文件中彻秆,當消費者需要數據的時候直接將文件發(fā)送給消費者,比如10W的消息共10M结闸,全部發(fā)送給消費者唇兑,10M的消息在內網中傳輸是非常快的桦锄,假如需要1s扎附,那么kafka的tps就是10w。Zero copy對應的是Linux中sendfile函數结耀,這個函數會接受一個offsize來確定從哪里開始讀取×粢梗現實中匙铡,不可能將整個文件全部發(fā)給消費者,他通過消費者傳遞過來的偏移量來使用零拷貝讀取指定內容的數據返回給消費者碍粥。

總結

Kafka快的原因是他將一個個消息變成一個文件鳖眼,通過mmp提高IO速度,寫入時在末尾直接添加嚼摩,讀取時通過偏移量直接返回钦讳。

最后說點原作者沒有說的

不能因為快我們的消息隊列就只選擇Kafka,技術的選型還是要結合具體的業(yè)務場景枕面,合適的才是最好的愿卒,不能只以快論英雄,這一點相信男同胞們深有體會潮秘。具體不同MQ的使用場景可以看我之前的文章琼开,《Kafka還是RabbitMQ?》唇跨。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末稠通,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子买猖,更是在濱河造成了極大的恐慌改橘,老刑警劉巖貌夕,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫌术,死亡現場離奇詭異混弥,居然都是意外死亡上荡,警方通過查閱死者的電腦和手機袁辈,發(fā)現死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門痒谴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來魏蔗,“玉大人舰绘,你說我怎么就攤上這事虱而》げ停” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵牡拇,是天一觀的道長魁瞪。 經常有香客問我,道長惠呼,這世上最難降的妖魔是什么导俘? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮剔蹋,結果婚禮上旅薄,老公的妹妹穿的比我還像新娘。我一直安慰自己泣崩,他們只是感情好少梁,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布洛口。 她就那樣靜靜地躺著,像睡著了一般猎莲。 火紅的嫁衣襯著肌膚如雪绍弟。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天著洼,我揣著相機與錄音樟遣,去河邊找鬼。 笑死身笤,一個胖子當著我的面吹牛豹悬,可吹牛的內容都是我干的。 我是一名探鬼主播液荸,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瞻佛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了娇钱?” 一聲冷哼從身側響起伤柄,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎文搂,沒想到半個月后适刀,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡煤蹭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年笔喉,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硝皂。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡常挚,死狀恐怖,靈堂內的尸體忽然破棺而出稽物,到底是詐尸還是另有隱情奄毡,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布贝或,位于F島的核電站吼过,受9級特大地震影響,放射性物質發(fā)生泄漏傀缩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一农猬、第九天 我趴在偏房一處隱蔽的房頂上張望赡艰。 院中可真熱鬧,春花似錦斤葱、人聲如沸慷垮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽料身。三九已至汤纸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間芹血,已是汗流浹背贮泞。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留幔烛,地道東北人啃擦。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像饿悬,于是被迫代替她去往敵國和親令蛉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354