為什麼 Kafka 這麼快?
覺得我們的內容實用嗎? MyApollo 電子報讀者募集中!歡迎訂閱電子報!
以前的工作用過 Kafka, 所以知道它很快,但是沒想過為什麼它可以這麼快,直到面試時被問了才知道只會使用是不夠的,必須了解應用的特性或原理,才能夠設計出正確系統架構。
Kafka 快的主因有二:
- 使用 Sequential append 的方式寫資料。這種方式寫的速度比起 random access 會快上許多,所以很多收集日誌(log)的系統多半也都會採用 sequential append 方式寫入資料。
- 採用 Zero copy 技術。在未採用 zero copy 技術時, Kafka 需要將資料複製到 Socket buffer 再複製到 NIC buffer(網路介面的 buffer),最後再傳送出去,採用 zero copy 之後, Kafka 就有能力直接跳過 Socket buffer 直接複製到 NIC buffer 這段, 如此一來節省了一次不必要的複製,從而提升其效能。
p.s. 不是節省 Socket buffer 複製到 NIC buffer 這段的技術就稱為 zero copy, 任何可以節省從記憶體複製資料到其他不必要的地方的技術,都可以稱為 zero copy
以下 5 分鐘的影片以圖解說明 Kafka 快的原因,相當值得花點時間學習: