Kafka中的零拷貝技術(shù)主要在兩個(gè)過程中使用:
Producer生產(chǎn)的數(shù)據(jù)持久化到Broker:Kafka的Producer將數(shù)據(jù)發(fā)送到Broker時(shí),采用了mmap(內(nèi)存映射)文件映射技術(shù)填具,實(shí)現(xiàn)順序的快速寫入。這種方式下匆骗,數(shù)據(jù)直接從JVM內(nèi)存映射到磁盤文件中劳景,減少了數(shù)據(jù)從應(yīng)用程序緩沖區(qū)到操作系統(tǒng)緩沖區(qū)的拷貝過程。
Consumer從Broker讀取數(shù)據(jù):當(dāng)Consumer從Broker讀取數(shù)據(jù)時(shí)碉就,Kafka使用了sendfile系統(tǒng)調(diào)用盟广,該系統(tǒng)調(diào)用允許數(shù)據(jù)直接從磁盤文件讀到操作系統(tǒng)內(nèi)核緩沖區(qū)后,直接轉(zhuǎn)發(fā)到socket buffer進(jìn)行網(wǎng)絡(luò)發(fā)送瓮钥,而不需要將數(shù)據(jù)首先拷貝到應(yīng)用程序的用戶空間緩沖區(qū)筋量。這種方式減少了用戶態(tài)與內(nèi)核態(tài)之間的數(shù)據(jù)拷貝,從而提高了數(shù)據(jù)傳輸效率碉熄。
通過這兩個(gè)過程中的零拷貝技術(shù)桨武,Kafka能夠顯著提高數(shù)據(jù)傳輸效率,減少CPU和內(nèi)存的使用锈津,從而提升整體性能呀酸。