之前在項目中,有用Kafka來做日志處理,隻知道Kafka很适合用來處理日志,它高性能、高吞吐量。那麼它是如何做到高性能、高吞吐量的呢?
(1)使用了頁緩存技術
Kafka 每次接收到資料都會往磁盤上去寫,它是基于作業系統的頁緩存來實作檔案寫入的
作業系統本身有一層緩存,叫做 Page Cache,是在記憶體裡的緩存,我們也可以稱之為 OS Cache,意思就是作業系統自己管理的緩存。
在寫入磁盤檔案的時候,可以直接寫入這個 OS Cache 裡,也就是僅僅寫入記憶體中,接下來由作業系統自己決定什麼時候把 OS Cache 裡的資料真的刷入磁盤檔案中
(2)以磁盤順序寫的方式來寫
将資料追加到檔案的末尾,不是在檔案的随機位置來修改資料
(3)零拷貝技術
零拷貝就是不需要把 OS Cache 裡的資料拷貝到應用緩存,再從應用緩存拷貝到 Socket 緩存了,兩次拷貝都省略了
Kafka就是直接讓作業系統的 Cache 中的資料發送到網卡後傳輸給下遊的消費者,中間跳過了兩次拷貝資料的步驟