天天看點

ZeroCopy(零拷貝)在Kafka中的應用。在Producer中:1.Kafka的Producer接收到使用者資料後,

作者:架構師狂飙

Zero Copy(零拷貝)在Kafka中的應用。

在Producer中:

1. Kafka的Producer接收到使用者資料後,會首先寫入到Socket的發送緩沖區,此時資料還在使用者空間,這是第一次避免拷貝。

2. Kafka基于檔案映射記憶體映射(mmap)技術,會将Topic對應的日志檔案映射到記憶體中,Producer直接操作記憶體即可寫入資料,避免拷貝到核心空間,這是第二次避免拷貝。

3. 當發送緩沖區的資料超過 batch.size 時,會一次性發送出去,避免了多次send調用帶來的性能損耗,這也算是一種"批量零拷貝"。

4. Kafka Producer還會通過sendfile系統調用,直接在兩個檔案描述符之間拷貝資料,完全避免拷貝到使用者空間,這是第三次避免拷貝。

在Consumer中:

1. Kafka的Consumer使用mmap技術,會将Topic對應的日志檔案映射到記憶體中,Consumer可以直接從記憶體中讀取資料,避免第一次拷貝到使用者空間。

2. Kafka的Consumer以拉的方式批量讀取消息,每次會拉取多個消息,避免了頻繁讀空間帶來的性能損失,這也屬于一種"批量零拷貝"。

3. 在批量拉取消息後,Consumer會将消息依次傳回給使用者,而不會立即拷貝到使用者空間,直到使用者真正消費此消息,這 avoids 第二次拷貝。

4. Kafka的Consumer也使用到sendfile系統調用,将檔案描述符之間的資料直接拷貝到Socket,避免第三次拷貝到使用者空間。

可以看出,Kafka通過mmap記憶體映射、批量發送、sendfile零拷貝等手段,極大地減少了資料在使用者空間和核心空間之間的拷貝次數,這使得Kafka可以實作極高的吞吐量。這就是零拷貝技術在Kafka中得以完美應用的原因。 #軟體架構#

ZeroCopy(零拷貝)在Kafka中的應用。在Producer中:1.Kafka的Producer接收到使用者資料後,
ZeroCopy(零拷貝)在Kafka中的應用。在Producer中:1.Kafka的Producer接收到使用者資料後,
ZeroCopy(零拷貝)在Kafka中的應用。在Producer中:1.Kafka的Producer接收到使用者資料後,

繼續閱讀