kafka為什麼那個快?

2021-09-27 05:18:31 字數 864 閱讀 6283

kafka是乙個高吞吐速度的訊息中介軟體,可以部署在廉價的主機上。

速度快的原因有兩個:

磁碟讀寫的快慢取決於你怎麼使用它,寫入的時候可以選擇順序寫入和隨機寫入,kafka選擇的時順序寫入機制,該機制的讀寫速度和記憶體的速度基本持平

使用順序寫入的好處:

1.磁碟順序寫入的速度比記憶體隨機速度快

2.在記憶體中操作時,jvm的堆中資料量大,gc時的效率低,使用磁碟可以避免這個問題

3.順序寫入系統冷啟動後,磁碟快取依然可以使用。

kafka寫入資料時不是實時寫入磁碟的,它利用了現代作業系統分頁儲存來利用記憶體提高i/o效率,先寫在記憶體中,在一定的時間flush到磁碟中。

kafka提供了乙個引數——producer.type來控制是不是主動flush,如果kafka寫入到mmap之後就立即flush然後再返回producer叫 同步 (sync);寫入mmap之後立即返回producer不呼叫flush叫非同步 (async)

對物理記憶體的操作也可以同步到硬碟上。這種方式可以獲取很大的i/o提公升,省去了使用者空間到核心空間的開銷(read會把資料先放在核心空間,然後複製到使用者空間的記憶體中)

2.從讀資料方面

基於sendfile實現zero copy

傳統read/write方式進行網路檔案傳輸的方式,在這個過程當中,檔案資料經過四個copy過程

硬碟---核心buf--使用者buf----socket相關緩衝區---協議引擎

sendfile系統呼叫可以提供一種減少以上多次copy,提公升檔案傳輸效能的方法。

硬碟---核心buf----socket相關快取----協議引擎

在核心版本2.4之後,檔案描述符結果被改變,sendfile實現了更簡單的方式,再次減少了一次copy操作。

kafka 為什麼快

一般的 mq 每個訊息都有乙個狀態,這樣每個訊息狀態改變都要更新,增加了很多隨機讀寫。kafka 對每個 partition 只有乙個指標,而不是儲存每個訊息的狀態,所有在指標後面的訊息都是被消費過的訊息。這就去掉了很多 確認訊息 動作的隨機讀寫,通過一次移動指標,來確認多個訊息。很多訊息中介軟體,...

Kafka為什麼速度快

磁碟讀寫的快慢取決於你怎麼使用它,也就是順序讀寫或者隨機讀寫。在順序讀寫的情況下,磁碟的順序讀寫速度和記憶體持平。如果不刪除硬碟肯定會被撐滿,所以kakfa提供了兩種策略來刪除日誌 log.cleanup.policy配置 1 基於時間 檢查當前日誌檔案中是否有保留時間超過設定的閾值來尋找可刪除的日...

為什麼kafka的速度那麼快?

我們都知道,kafka是依賴於檔案系統來儲存和緩衝訊息的。在其他訊息佇列rabbitmq中,使用的是記憶體作為預設的儲存介質,而磁碟作為備選介質,以此來實現高吞吐和低延遲的效果 redis則是完全依賴於記憶體實現的。那為什麼kafka採用這種持久化的形式還能提供如此有競爭力的效能呢?首先kafka在...