(2)為什么Kafka速度那么快

消息保存或緩存磁盤上薛匪,一般認(rèn)為磁盤讀寫數(shù)據(jù)是會降低性能移必,因?yàn)?b>尋址會消耗時(shí)間啄踊,實(shí)際Kafka特性之一是高吞吐率掖蛤。

Kafka輕松支持普通服務(wù)器每秒百萬級寫入請求杀捻,超過了大部分的消息中間件,在日志處理海量數(shù)據(jù)場景廣泛應(yīng)用蚓庭。

基準(zhǔn)測試參考:Apache Kafka基準(zhǔn)測試:每秒寫入2百萬(在三臺廉價(jià)機(jī)器上)

一致讥、寫入數(shù)據(jù)

優(yōu)化寫入速度用兩個(gè)技術(shù):順序?qū)懭?和 MMFile 。

1.1 順序?qū)懭?/h4>

Linux對磁盤讀寫優(yōu)化:read-ahead和write-behind器赞,磁盤緩存等垢袱。內(nèi)存做這些操作,JAVA對象內(nèi)存開銷大港柜,堆內(nèi)存數(shù)據(jù)增多请契,GC時(shí)間長,磁盤好處:

(1)順序讀寫速度超過內(nèi)存隨機(jī)讀寫:每次讀寫都尋址(“機(jī)械動作”最耗時(shí))

(2)JVMGC效率低夏醉,內(nèi)存占用大爽锥。磁盤可避免

(3)系統(tǒng)冷啟動后,磁盤緩存依然可用

寫入數(shù)據(jù)

每個(gè)Partition都是一個(gè)文件 畔柔,收到消息后Kafka會把數(shù)據(jù)插入到文件末尾(虛框部分)氯夷。

缺陷:不能刪除數(shù)據(jù) ,每個(gè)消費(fèi)者(Consumer)對每個(gè)Topic都有一個(gè)offset表示 讀到第幾條數(shù)據(jù)

Consumer1有兩個(gè)offset分別對應(yīng)Partition0靶擦、Partition1(假設(shè)每一個(gè)Topic一個(gè)Partition)肠槽;Consumer2有一個(gè)offset對應(yīng)Partition2擎淤。offset是由客戶端SDK負(fù)責(zé)保存,Kafka的Broker完全無視這個(gè)東西的存在秸仙;一般情況下SDK會把它保存到zookeeper里面嘴拢。(所以需要給Consumer提供zookeeper的地址)。

解決:Kakfa刪除數(shù)據(jù)策略:(1)基于時(shí)間寂纪,(2)基于partition文件大小(配置文檔看具體配置)席吴。

1.2 Memory Mapped Files(mmap內(nèi)存映射文件)

出現(xiàn)原因:順序寫入硬盤,硬盤訪問速度還是不可能追上內(nèi)存捞蛋。Kafka不是實(shí)時(shí)寫入硬盤 孝冒,利用了操作系統(tǒng) 分頁存儲(用內(nèi)存提高I/O效率)

工作原理:操作系統(tǒng)Page實(shí)現(xiàn)文件物理內(nèi)存直接映射拟杉。對物理內(nèi)存的操作會同步到硬盤(操作系統(tǒng)適當(dāng)時(shí))庄涡。64位操作系統(tǒng)中可表示20G數(shù)據(jù)文件

用途:進(jìn)程讀寫硬盤一樣讀寫內(nèi)存(當(dāng)然是虛擬機(jī)內(nèi)存),不必關(guān)心內(nèi)存大小搬设,虛擬內(nèi)存兜底穴店。

好處:I/O提升, 省去用戶空間內(nèi)核空間 復(fù)制開銷(調(diào)用文件的read會把數(shù)據(jù)先放到內(nèi)核空間的內(nèi)存中拿穴,然后再復(fù)制到用戶空間的內(nèi)存中泣洞。)

缺點(diǎn):不可靠, 寫到mmap中的數(shù)據(jù)默色,沒被真正寫到硬盤球凰,操作系統(tǒng)會在程序主動調(diào)用flush的時(shí)候才把數(shù)據(jù)真正寫到硬盤

Kafka提供了參數(shù)producer.type控制是不是主動flush腿宰,如果Kafka寫入到mmap之后就立即flush然后再返回Producer叫 同步 (sync)呕诉;寫入mmap之后立即返回Producer不調(diào)用flush異步 (async)。

二吃度、讀取數(shù)據(jù)

基于sendfile實(shí)現(xiàn)Zero Copy甩挫,sendfile系統(tǒng)調(diào)用減少多次copy,提升文件傳輸性能

2.1 傳統(tǒng)模式文件傳輸流程(read/write方式):

1.文件數(shù)據(jù)被copy到內(nèi)核緩沖區(qū)(調(diào)read函數(shù))规肴,2.然后到用戶緩沖區(qū)(read函數(shù)返回)捶闸,3.再到內(nèi)核與socket相關(guān)緩沖區(qū)(write函數(shù)調(diào)用)

4.相關(guān)協(xié)議引擎

四次copy操作:硬盤—>內(nèi)核buf—>用戶buf—>socket相關(guān)緩沖區(qū)—>協(xié)議引擎

2.2 簡化網(wǎng)絡(luò)上和兩個(gè)本地文件之間的數(shù)據(jù)傳輸

引入sendfile系統(tǒng)調(diào)用夜畴,減少數(shù)據(jù)復(fù)制拖刃、上下文切換。

(1)sendfile(socket, file, len)運(yùn)行流程:? ? 減少到user緩沖區(qū)

1.文件數(shù)據(jù)被copy至內(nèi)核緩沖區(qū)(sendfile系統(tǒng)調(diào)用)贪绘,2.至內(nèi)核中socket相關(guān)緩沖區(qū)兑牡,3.協(xié)議引擎? ? ?

(2)優(yōu)點(diǎn):1)2.1linux內(nèi)核引進(jìn)sendfile:減少內(nèi)核緩沖區(qū)到user緩沖區(qū),再到socket相關(guān)緩沖區(qū)文件copy? 2)2.4后税灌,文件描述符結(jié)果被改變:僅將記錄數(shù)據(jù)位置長度數(shù)據(jù)存 socket緩存均函。實(shí)際數(shù)據(jù)由DMA模塊直接發(fā)送到協(xié)議引擎亿虽,減少一次copy。(4次苞也,變2次洛勉,變1次)

(3)在apache,nginx如迟,lighttpd等web服務(wù)器當(dāng)中收毫,都有一項(xiàng)sendfile相關(guān)的配置,提升文件傳輸性能殷勘。

Kafka把所有的消息都存放在一個(gè)個(gè)文件中此再,當(dāng)消費(fèi)者需要數(shù)據(jù)的時(shí)候Kafka直接把文件發(fā)送給消費(fèi)者,配合mmap作為文件讀寫方式玲销,直接把它傳給sendfile输拇。

三、批量壓縮

系統(tǒng)瓶頸是網(wǎng)絡(luò)IO贤斜,不是CPU或磁盤策吠,數(shù)據(jù)壓縮消耗CPU資源少,

批量壓縮,多個(gè)消息一起壓蠢古,如每個(gè)消息都壓縮奴曙,壓縮率低,

Kafka用遞歸消息集合草讶,傳輸并保持壓縮格式(在日志中)洽糟,直到被消費(fèi)者解壓縮

Kafka支持多種壓縮協(xié)議(Gzip和Snappy壓縮協(xié)議)

總結(jié)

Kafka速度秘訣:

(1)讀取數(shù)據(jù)時(shí)配合sendfile直接暴力輸出

(2)寫入數(shù)據(jù):順序?qū)懭?/b>,單個(gè)Partion是末尾添加所以速度最優(yōu)堕战。

(3)批量壓縮把所有消息變成一個(gè)批量文件坤溃,合理減少網(wǎng)絡(luò)IO損耗,通過mmap提高I/O速度嘱丢。

https://www.cnblogs.com/binyue/p/10308754.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末薪介,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子越驻,更是在濱河造成了極大的恐慌汁政,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缀旁,死亡現(xiàn)場離奇詭異记劈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)并巍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進(jìn)店門目木,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人懊渡,你說我怎么就攤上這事刽射【猓” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵誓禁,是天一觀的道長懈息。 經(jīng)常有香客問我,道長摹恰,這世上最難降的妖魔是什么漓拾? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮戒祠,結(jié)果婚禮上骇两,老公的妹妹穿的比我還像新娘。我一直安慰自己姜盈,他們只是感情好低千,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著馏颂,像睡著了一般示血。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上救拉,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天难审,我揣著相機(jī)與錄音,去河邊找鬼亿絮。 笑死告喊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的派昧。 我是一名探鬼主播黔姜,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒂萎!你這毒婦竟也來了秆吵?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤五慈,失蹤者是張志新(化名)和其女友劉穎纳寂,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泻拦,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡毙芜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聪轿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爷肝。...
    茶點(diǎn)故事閱讀 38,064評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猾浦,死狀恐怖陆错,靈堂內(nèi)的尸體忽然破棺而出灯抛,到底是詐尸還是另有隱情,我是刑警寧澤音瓷,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布对嚼,位于F島的核電站,受9級特大地震影響绳慎,放射性物質(zhì)發(fā)生泄漏纵竖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一杏愤、第九天 我趴在偏房一處隱蔽的房頂上張望靡砌。 院中可真熱鬧,春花似錦珊楼、人聲如沸通殃。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽画舌。三九已至,卻和暖如春已慢,著一層夾襖步出監(jiān)牢的瞬間曲聂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工佑惠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朋腋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓膜楷,卻偏偏與公主長得像乍丈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子把将,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容