Kafka 如何理解Kafka的「快」?

2021-10-04 21:38:37 字數 1472 閱讀 4301

據了解,kafka吞吐量峰值每秒百萬,就算在記憶體個cpu都不高的情況下,最高可達每秒十萬,並且還能做到持久化儲存。kafka如此高吞吐率的原因是什麼?

,隨機寫每秒幾十幾百k。

作業系統從磁碟將資料copy(dma copy)到核心空間緩衝區(kernel buffer);

應用程式從核心空間緩衝區(kernel buffer)將資料copy(cpu copy)到使用者空間緩衝區(user buffer);

應用程式從使用者空間緩衝區(user buffer)將資料copy(cpu copy)到socket緩衝區(socket buffer);

作業系統從socket緩衝區(socket buffer)將資料copy(dma copy)到網絡卡(nic buffer),由網絡卡進行網路傳輸。

其中涉及4次copy、4次上下文切換和2次cpu中斷,而第2次和第3次的copy只是把資料copy到使用者空間又原封不動地copy回來,因此帶來了2次cpu copy和2次上下文切換,這是完全沒必要的。零拷貝技術就是為了優化掉這2次不必要的copy。

linux核心2.1引入sendfile系統呼叫:在核心空間把資料從核心緩衝區直接複製到socket緩衝區,從而減少不必要的copy和上下文切換。引入sendfile後,上述流程簡化為:

作業系統將資料從磁碟copy(dma copy)到核心空間緩衝區(kernel buffer);

應用程式通過sendfile在核心空間,從核心空間緩衝區(kernel buffer)將資料copy(cpu copy)到socket緩衝區(socket buffer);

作業系統從socket緩衝區(socket buffer)將資料copy(dma copy)到網絡卡(nic buffer),由網絡卡進行網路傳輸。

可見,利用sendfile系統呼叫後,可以將4次copy減少到3次,4次上下文切換減少到2次,2次cpu中斷減少到1次。

Kafka系列二 kafka相關問題理解

類jms訊息佇列,結合jms中的兩種模式,可以有多個消費者主動拉取資料,在jms中只有點對點模式才有消費者主動拉取資料。kafka是乙個生產 消費模型。producer 生產者,只負責資料生產,生產者的 可以整合到任何系統中。資料的分發策略由producer決定,預設是defaultpartitio...

Kafka詳解二 如何配置Kafka集群

kafka集群配置比較簡單,為了更好的讓大家理解,在這裡要分別介紹下面三種配置 1.首先啟動zookeeper服務 kafka本身提供了啟動zookeeper的指令碼 在kafka bin 目錄下 和zookeeper配置檔案 在kafka config 目錄下 首先進入kafka的主目錄 可通過 ...

Kafka詳解二 如何配置Kafka集群

kafka集群配置比較簡單,為了更好的讓大家理解,在這裡要分別介紹下面三種配置 1.首先啟動zookeeper服務 kafka本身提供了啟動zookeeper的指令碼 在kafka bin 目錄下 和zookeeper配置檔案 在kafka config 目錄下 首先進入kafka的主目錄 可通過 ...