www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]談到大數(shù)據(jù)傳輸都會想到 Kafka,Kafka 號稱大數(shù)據(jù)的殺手锏,在業(yè)界有很多成熟的應(yīng)用場景并且被主流公司認(rèn)可。這款為大數(shù)據(jù)而生的消息中間件,以其百萬級TPS的吞吐量名聲大噪,迅速成為大數(shù)據(jù)領(lǐng)域的寵兒,在數(shù)據(jù)采集、傳輸、存儲的過程中發(fā)揮著舉足輕重的作用。

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里

談到大數(shù)據(jù)傳輸都會想到 Kafka,Kafka 號稱大數(shù)據(jù)的殺手锏,在業(yè)界有很多成熟的應(yīng)用場景并且被主流公司認(rèn)可。這款為大數(shù)據(jù)而生的消息中間件,以其百萬級TPS的吞吐量名聲大噪,迅速成為大數(shù)據(jù)領(lǐng)域的寵兒,在數(shù)據(jù)采集、傳輸、存儲的過程中發(fā)揮著舉足輕重的作用。

在業(yè)界已經(jīng)有很多成熟的消息中間件如:RabbitMQ, RocketMQ, ActiveMQ, ZeroMQ,為什么 Kafka 在眾多的敵手中依然能有一席之地,當(dāng)然靠的是其強(qiáng)悍的吞吐量。下面帶領(lǐng)大家來揭秘。

Kafka 如何做到支持百萬級 TPS ?

先用一張思維導(dǎo)圖直接告訴你答案:

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里
Kafka 支持百萬TPS的秘密

順序讀寫磁盤

生產(chǎn)者寫入數(shù)據(jù)和消費者讀取數(shù)據(jù)都是順序讀寫的,先來一張圖直觀感受一下順序讀寫和隨機(jī)讀寫的速度:

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里
順序讀寫 VS 隨機(jī)讀寫

從圖中可以看出傳統(tǒng)硬盤或者SSD的順序讀寫甚至超過了內(nèi)存的隨機(jī)讀寫,當(dāng)然與內(nèi)存的順序讀寫對比差距還是很大。

所以Kafka選擇順序讀寫磁盤也不足為奇了。

下面以傳統(tǒng)機(jī)械磁盤為例詳細(xì)介紹一下什么是順序讀寫和隨機(jī)讀寫。

盤片盤面:一塊硬盤一般有多塊盤片,盤片分為上下兩面,其中有效面稱為盤面,一般上下都有效,也就是說:盤面數(shù) = 盤片數(shù) * 2。

磁頭:磁頭切換磁道讀寫數(shù)據(jù)時是通過機(jī)械設(shè)備實現(xiàn)的,一般速度較慢;而磁頭切換盤面讀寫數(shù)據(jù)是通過電子設(shè)備實現(xiàn)的,一般速度較快,因此磁頭一般是先讀寫完柱面后才開始尋道的(不用切換磁道),這樣磁盤讀寫效率更快。

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里
傳統(tǒng)機(jī)械磁盤

磁道:磁道就是以中間軸為圓心的圓環(huán),一個盤面有多個磁道,磁道之間有間隙,磁道也就是磁盤存儲數(shù)據(jù)的介質(zhì)。磁道上布有一層磁介質(zhì),通過磁頭可以使磁介質(zhì)的極性轉(zhuǎn)換為數(shù)據(jù)信號,即磁盤的讀,磁盤寫剛好與之相反。

柱面:磁盤中不同盤面中半徑相同的磁道組成的,也就是說柱面總數(shù) = 某個盤面的磁道數(shù)。

扇區(qū):單個磁道就是多個弧形扇區(qū)組成的,盤面上的每個磁道擁有的扇區(qū)數(shù)量是相等。扇區(qū)是最小存儲單元,一般扇區(qū)大小為512bytes。

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里
單盤片示意圖

如果系統(tǒng)每次只讀取一個扇區(qū),那恐怕效率太低了,所以出現(xiàn)了block(塊)的概念。文件讀取的最小單位是block,根據(jù)不同操作系統(tǒng)一個block一般由多個扇區(qū)組成。

有了磁盤的背景知識我們就可以很容易理解順序讀寫和隨機(jī)讀寫了。

插播維基百科定義:
順序讀寫:是一種按記錄的邏輯順序進(jìn)行讀、寫操作的存取方法 ,即按照信息在存儲器中的實際位置所決定的順序使用信息。?

隨機(jī)讀寫:指的是當(dāng)存儲器中的消息被讀取或?qū)懭霑r,所需要的時間與這段信息所在的位置無關(guān)。


當(dāng)讀取第一個block時,要經(jīng)歷尋道、旋轉(zhuǎn)延遲、傳輸三個步驟才能讀取完這個block的數(shù)據(jù)。而對于下一個block,如果它在磁盤的其他任意位置,訪問它會同樣經(jīng)歷尋道、旋轉(zhuǎn)、延時、傳輸才能讀取完這個block的數(shù)據(jù),我們把這種方式叫做隨機(jī)讀寫。但是如果這個block的起始扇區(qū)剛好在剛才訪問的block的后面,磁頭就能立刻遇到,不需等待直接傳輸,這種就叫順序讀寫。

好,我們再回到 Kafka,詳細(xì)介紹Kafka如何實現(xiàn)順序讀寫入數(shù)據(jù)。

Kafka 寫入數(shù)據(jù)是順序的,下面每一個Partition 都可以當(dāng)做一個文件,每次接收到新數(shù)據(jù)后Kafka會把數(shù)據(jù)插入到文件末尾,虛框部分代表文件尾。

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里
順序?qū)?

這種方法有一個問題就是刪除數(shù)據(jù)不方便,所以 Kafka 一般會把所有的數(shù)據(jù)都保留下來,每個消費者(Consumer)對每個Topic都有一個 offset 用來記錄讀取進(jìn)度或者叫坐標(biāo)。

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里
順序讀

Memory Mapped Files(MMAP)

在文章開頭我們看到硬盤的順序讀寫基本能與內(nèi)存隨機(jī)讀寫速度媲美,但是與內(nèi)存順序讀寫相比還是太慢了,那 Kafka 如果有追求想進(jìn)一步提升效率怎么辦?可以使用現(xiàn)代操作系統(tǒng)分頁存儲來充分利用內(nèi)存提高I/O效率,這也是下面要介紹的 MMAP 技術(shù)。

MMAP也就是內(nèi)存映射文件,在64位操作系統(tǒng)中一般可以表示 20G 的數(shù)據(jù)文件,它的工作原理是直接利用操作系統(tǒng)的 Page 來實現(xiàn)文件到物理內(nèi)存的直接映射,完成映射之后對物理內(nèi)存的操作會被同步到硬盤上。

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里
MMAP原理

通過MMAP技術(shù)進(jìn)程可以像讀寫硬盤一樣讀寫內(nèi)存(邏輯內(nèi)存),不必關(guān)心內(nèi)存的大小,因為有虛擬內(nèi)存兜底。這種方式可以獲取很大的I/O提升,省去了用戶空間到內(nèi)核空間復(fù)制的開銷。

也有一個很明顯的缺陷,寫到MMAP中的數(shù)據(jù)并沒有被真正的寫到硬盤,操作系統(tǒng)會在程序主動調(diào)用 flush 的時候才把數(shù)據(jù)真正的寫到硬盤。

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

Zero Copy(零拷貝)

Kafka 另外一個黑技術(shù)就是使用了零拷貝,要想深刻理解零拷貝必須得知道什么是DMA。

什么是DMA?

眾所周知 CPU 的速度與磁盤 IO 的速度比起來相差幾個數(shù)量級,可以用烏龜和火箭做比喻。

一般來說 IO 操作都是由 CPU 發(fā)出指令,然后等待 IO 設(shè)備完成操作后返回,那CPU會有大量的時間都在等待IO操作。

但是CPU 的等待在很多時候并沒有太多的實際意義,我們對于 I/O 設(shè)備的大量操作其實都只是把內(nèi)存里面的數(shù)據(jù)傳輸?shù)?I/O 設(shè)備而已。比如進(jìn)行大文件復(fù)制,如果所有數(shù)據(jù)都要經(jīng)過 CPU,實在是有點兒太浪費時間了。

基于此就有了DMA技術(shù),翻譯過來也就是直接內(nèi)存訪問(Direct Memory Access),有了這個可以減少 CPU 的等待時間。

Kafka 零拷貝原理

如果不使用零拷貝技術(shù),消費者(consumer)從Kafka消費數(shù)據(jù),Kafka從磁盤讀數(shù)據(jù)然后發(fā)送到網(wǎng)絡(luò)上去,數(shù)據(jù)一共發(fā)生了四次傳輸?shù)倪^程。其中兩次是 DMA 的傳輸,另外兩次,則是通過 CPU 控制的傳輸。

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里
四次傳輸過程

第一次傳輸:從硬盤上將數(shù)據(jù)讀到操作系統(tǒng)內(nèi)核的緩沖區(qū)里,這個傳輸是通過 DMA 搬運的。

第二次傳輸:從內(nèi)核緩沖區(qū)里面的數(shù)據(jù)復(fù)制到分配的內(nèi)存里面,這個傳輸是通過 CPU 搬運的。

第三次傳輸:從分配的內(nèi)存里面再寫到操作系統(tǒng)的 Socket 的緩沖區(qū)里面去,這個傳輸是由 CPU 搬運的。

第四次傳輸:從 Socket 的緩沖區(qū)里面寫到網(wǎng)卡的緩沖區(qū)里面去,這個傳輸是通過 DMA 搬運的。

實際上在kafka中只進(jìn)行了兩次數(shù)據(jù)傳輸,如下圖:

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里
兩次傳輸,零拷貝技術(shù)

第一次傳輸:通過 DMA從硬盤直接讀到操作系統(tǒng)內(nèi)核的讀緩沖區(qū)里面。

第二次傳輸:根據(jù) Socket 的描述符信息直接從讀緩沖區(qū)里面寫入到網(wǎng)卡的緩沖區(qū)里面。

我們可以看到同一份數(shù)據(jù)的傳輸次數(shù)從四次變成了兩次,并且沒有通過 CPU 來進(jìn)行數(shù)據(jù)搬運,所有的數(shù)據(jù)都是通過 DMA 來進(jìn)行傳輸?shù)?。沒有在內(nèi)存層面去復(fù)制(Copy)數(shù)據(jù),這個方法稱之為零拷貝(Zero-Copy)。

無論傳輸數(shù)據(jù)量的大小,傳輸同樣的數(shù)據(jù)使用了零拷貝能夠縮短 65% 的時間,大幅度提升了機(jī)器傳輸數(shù)據(jù)的吞吐量,這也是Kafka能夠支持百萬TPS的一個重要原因。

Batch Data(數(shù)據(jù)批量處理)

當(dāng)消費者(consumer)需要消費數(shù)據(jù)時,首先想到的是消費者需要一條,kafka發(fā)送一條,消費者再要一條kafka再發(fā)送一條。但實際上 Kafka 不是這樣做的,Kafka 耍小聰明了。

Kafka 把所有的消息都存放在一個一個的文件中,當(dāng)消費者需要數(shù)據(jù)的時候 Kafka 直接把文件發(fā)送給消費者。比如說100萬條消息放在一個文件中可能是10M的數(shù)據(jù)量,如果消費者和Kafka之間網(wǎng)絡(luò)良好,10MB大概1秒就能發(fā)送完,既100萬TPS,Kafka每秒處理了10萬條消息。

看到這里你可以有疑問了,消費者只需要一條消息啊,kafka把整個文件都發(fā)送過來了,文件里面剩余的消息怎么辦?不要忘了消費者可以通過offset記錄消費進(jìn)度。

發(fā)送文件還有一個好處就是可以對文件進(jìn)行批量壓縮,減少網(wǎng)絡(luò)IO損耗。

總結(jié)

最后再總結(jié)一下 Kafka 支持百萬級 TPS 的秘密:

(1)順序?qū)懭霐?shù)據(jù),在 Partition 末尾追加,所以速度最優(yōu)。

(2)使用 MMAP 技術(shù)將磁盤文件與內(nèi)存映射,Kafka 可以像操作磁盤一樣操作內(nèi)存。

(3)通過 DMA 技術(shù)實現(xiàn)零拷貝,減少數(shù)據(jù)傳輸次數(shù)。

(4)讀取數(shù)據(jù)時配合sendfile直接暴力輸出,批量壓縮把所有消息變成一個批量文件,合理減少網(wǎng)絡(luò)IO損耗。

- END -


特別推薦一個分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長按關(guān)注一下:

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里

長按訂閱更多精彩▼

支持百萬級TPS,Kafka是怎么做到的?答案藏在這10張圖里

如有收獲,點個在看,誠摯感謝

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉