kafka高效讀寫的原因

2021-10-23 17:38:38 字數 908 閱讀 7312

1.順序寫磁碟

kafka的producer在生產資料的時候會將資料順序追加到log檔案的末端,這樣減少了大量的磁頭定址時間,比隨機寫要快很多

2.零拷貝技術

kafka中的消費者在讀取服務端的資料時,需要將伺服器端的磁碟檔案通過網路傳送到kafka程序,網路傳送需要經過幾種網路節點。如圖所示:

傳統的讀取檔案資料併發送到網路的步驟如下

(1)作業系統將資料從磁碟檔案中讀取到核心空間中的頁面快取;

(2)應用程式將資料從核心空間讀取到使用者空間緩衝區;

(3)應用程式將讀到資料寫回核心空間並放入到socket緩衝區;

(4)作業系統將資料從socket緩衝區複製到網絡卡介面,此時資料才能通過網路傳送

通常情況下,kafka的訊息會有多個訂閱者,生產者發布的訊息會被不同的消費者多次消費,為了優化這個流程,kafka使用了「零拷貝技術」,如下圖所示

「零拷貝技術」只用將磁碟檔案中的資料複製到頁面快取中乙份,然後將資料直接從頁面快取直接傳送到網路中(傳送給不同的訂閱者時,都可以使用同乙個頁面快取),避免了重複複製操作。

如果有十個消費者,傳統方式下,資料複製次數為4*10=40次,而使用「零拷貝技術」只需要1+10=11次,一次為磁碟複製到頁面快取,10次表示10個消費者各自讀取一次頁面快取。

3.zk在kafka中的作用

kafka集群中有乙個broker會被選舉成controller,負責管理集群的broker的上下線,所有的topic分割槽副本分配和leader的選舉工作。controller的管理工作都依賴於zk。

DX如此高效的原因

主要是windows的開發商 微軟 影響力 比較大 他自己基於windows開發的directx 會聯合其他硬體廠商 dx會向他們展示自己的規則 以及函式呼叫形式 資料結構等 硬體廠商據此寫自己的硬體的驅動程式 作為dx hardware抽象layer的一部分 這樣 程式可以通過dx dx通過hal...

高效讀寫DB 目標

最近的工作需要頻繁的讀寫資料庫,即使我們用了 redis做快取,這樣的話,我們減少了對資料庫的讀,但沒有減少對資料庫的寫。我想要減少對資料庫的寫操作,這樣可以減少對資料庫的壓力。所以決定實現乙個dbcache.主要作用 快取部分資料 根據需求,我們可以按照lru演算法,來在dbcache快取活躍使用...

高效檔案流讀寫

filechannel,是記憶體與磁碟檔案的通道。優勢 io讀寫效能提高 os負責 也可引做共享記憶體,減少io操作,提公升併發性 應用crash,保證這部分內容還能寫的進去檔案。在我們呼叫channel.write bytebuffer 之後,具體何時寫入磁碟 bytebuffer中內容暫存於 o...