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

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

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

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

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

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

先用一張思維導圖直接告訴你答案:

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

順序讀寫磁盤

生產者寫入數據和消費者讀取數據都是順序讀寫的,先來一張圖直觀感受一下順序讀寫和隨機讀寫的速度:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

隨機讀寫:指的是當存儲器中的消息被讀取或寫入時,所需要的時間與這段信息所在的位置無關。


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

好,我們再回到 Kafka,詳細介紹Kafka如何實現順序讀寫入數據。

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

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

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

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

Memory Mapped Files(MMAP)

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

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

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

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

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

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

Zero Copy(零拷貝)

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

什么是DMA?

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

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

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

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

Kafka 零拷貝原理

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

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

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

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

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

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

實際上在kafka中只進行了兩次數據傳輸,如下圖:

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

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

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

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

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

Batch Data(數據批量處理)

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

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

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

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

總結

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

(1)順序寫入數據,在 Partition 末尾追加,所以速度最優(yōu)。

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

(3)通過 DMA 技術實現零拷貝,減少數據傳輸次數。

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

- END -


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

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

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

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

長按訂閱更多精彩▼

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

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

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

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

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

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

關鍵字: AWS AN BSP 數字化

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

關鍵字: 汽車 人工智能 智能驅動 BSP

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

關鍵字: 亞馬遜 解密 控制平面 BSP

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

關鍵字: 騰訊 編碼器 CPU

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

關鍵字: 華為 12nm EDA 半導體

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

關鍵字: 華為 12nm 手機 衛(wèi)星通信

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

關鍵字: 通信 BSP 電信運營商 數字經濟

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

關鍵字: VI 傳輸協議 音頻 BSP

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

關鍵字: BSP 信息技術
關閉
關閉