Kafka如何實現每秒上百萬的高併發寫入

2021-09-25 22:33:53 字數 1677 閱讀 8614

kafka是高吞吐低延遲的高併發、高效能的訊息中介軟體,在大資料領域有極為廣泛的運用。配置良好的kafka集群甚至可以做到每秒幾十萬、上百萬的超高併發寫入。

那麼kafka到底是如何做到這麼高的吞吐量和效能的呢?

首先kafka每次接收到資料都會往磁碟上去寫,為了保證資料寫入效能,kafka是基於作業系統的頁快取來實現檔案寫入的。

作業系統本身有一層快取,叫做page cache,是在記憶體裡的快取,我們也可以稱之為os cache,意思就是作業系統自己管理的快取。

在寫入磁碟檔案的時候,可以直接寫入這個os cache裡,也就是僅僅寫入記憶體中,接下來由作業系統自己決定什麼時候把os cache裡的資料真的刷入磁碟檔案中。

僅僅這乙個步驟,就可以將磁碟檔案寫效能提公升很多了,因為其實這裡相當於是在寫記憶體,不是在寫磁碟。

另外乙個就是kafka寫資料的時候,非常關鍵的一點,它是以磁碟順序寫的方式來寫的。也就是說,僅僅將資料追加到檔案的末尾,不是在檔案的隨機位置來修改資料。

普通的機械磁碟如果要是隨機寫的話,確實效能極差,也就是隨便找到檔案的某個位置來寫資料。但是如果是追加檔案末尾按照順序的方式來寫資料的話,那麼這種磁碟順序寫的效能基本上可以跟寫記憶體的效能本身也是差不多的。

所以kafka在寫資料的時候,一方面基於了os層面的page cache來寫資料,所以效能很高,本質就是在寫記憶體罷了。另外乙個,採用磁碟順序寫的方式,所以即使資料刷入磁碟的時候,效能也是極高的,也跟寫記憶體是差不多的。

基於上面兩點,kafka就實現了寫入資料的超高效能。

kafka消費資料實際上就是要從kafka的磁碟檔案裡讀取某條資料然後傳送給下游的消費者。那麼這裡如果頻繁的從磁碟讀資料然後發給消費者,效能瓶頸在**呢?

假設要是kafka什麼優化都不做,就是很簡單的從磁碟讀資料傳送給下游的消費者,那麼大概過程:

先看看要讀的資料在不在os cache裡,如果不在的話就從磁碟檔案裡讀取資料後放入os cache。

接著從作業系統的os cache裡拷貝資料到應用程式程序的快取裡,再從應用程式程序的快取裡拷貝資料到作業系統層面的socket快取裡,最後從socket快取裡提取資料後傳送到網絡卡,最後傳送出去給下游消費。

這裡,有兩次沒必要的拷貝。一次是從作業系統的cache裡拷貝到應用程序的快取裡,接著又從應用程式快取裡拷貝回作業系統的socket快取裡。而且為了進行這兩次拷貝,中間還發生了好幾次上下文切換。所以這種方式來讀取資料是比較消耗效能的。

kafka為了解決這個問題,在讀資料的時候是引入零拷貝技術。也就是說,直接讓作業系統的cache中的資料傳送到網絡卡後傳輸給下游的消費者,中間跳過了兩次拷貝資料的步驟,socket快取中僅僅會拷貝乙個描述符過去,不會拷貝資料到socket快取。

通過零拷貝技術,就不需要把os cache裡的資料拷貝到應用快取,再從應用快取拷貝到socket快取了,兩次拷貝都省略了,所以叫做零拷貝。

對socket快取僅僅就是拷貝資料的描述符過去,然後資料就直接從os cache中傳送到網絡卡上去了,這個過程大大的提公升了資料消費時讀取檔案資料的效能。

而且kafka在從磁碟讀資料的時候,會先看看os cache記憶體中是否有,如果有的話,其實讀資料都是直接讀記憶體的。如果kafka集群經過良好的調優,會發現大量的資料都是直接寫入os cache中,然後讀資料的時候也是從os cache中讀。相當於是kafka完全基於記憶體提供資料的寫和讀了,所以這個整體效能會極其的高。es底層也是大量基於os cache實現了海量資料的高效能檢索的,跟kafka原理類似。

ASKTOM 關於更新上百萬的資料方法

假設如果我要更新數百萬以上的資料,我大概會選擇不去 更新 update 吧.我很有可能會用以下的方法 create table new table as select 在此更新 from old table index new table 給新的表建立索引 grant on new table 授權...

幾十上百萬行,如何快速查詢出表資料

答 用分頁儲存過程 函式名稱 getrecordfrompage 函式功能 獲取指定頁的資料 引數說明 tblname 包含資料的表名 fldname 關鍵欄位名 pagesize 每頁記錄數 pageindex 要獲取的頁碼 ordertype 排序型別,0 公升序,1 降序 strwhere 查...

物聯網時代如何管理上百萬裝置 找風河DLM就對了

51cto.com原創稿件 8月22日,2017年風河中國開發者大會 在北京召開,大會除了分享風河公司對於嵌入式智慧型化趨勢的看法之外,還設立了分會場 智慧型網路 物聯網 安全認證以及虛擬化 nfv 等技術熱點。在現場,近千名從事智慧型裝置的研發工作的開發者們到場聽會,彼此間深入交流討論物聯網時代各...