溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Kafka中所謂的零拷貝技術(shù)是什么

發(fā)布時(shí)間:2021-10-18 15:16:30 來源:億速云 閱讀:132 作者:iii 欄目:編程語言

這篇文章主要講解了“Kafka中所謂的零拷貝技術(shù)是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Kafka中所謂的零拷貝技術(shù)是什么”吧!

除了消息順序追加、頁緩存等技術(shù),Kafka 還使用零拷貝技術(shù)來進(jìn)一步提升性能。所謂的零拷貝是指將數(shù)據(jù)直接從磁盤文件復(fù)制到網(wǎng)卡設(shè)備中,而不需要經(jīng)由應(yīng)用程序之手。零拷貝大大提高了應(yīng)用程序的性能,減少了內(nèi)核和用戶模式之間的上下文切換。對 Linux 操作系統(tǒng)而言,零拷貝技術(shù)依賴于底層的 sendfile() 方法實(shí)現(xiàn)。對應(yīng)于 Java 語言,F(xiàn)ileChannal.transferTo() 方法的底層實(shí)現(xiàn)就是 sendfile() 方法。

單純從概念上理解“零拷貝”比較抽象,這里簡單地介紹一下它。考慮這樣一種常用的情形:你需要將靜態(tài)內(nèi)容(類似圖片、文件)展示給用戶。這個(gè)情形就意味著需要先將靜態(tài)內(nèi)容從磁盤中復(fù)制出來放到一個(gè)內(nèi)存 buf 中,然后將這個(gè) buf 通過套接字(Socket)傳輸給用戶,進(jìn)而用戶獲得靜態(tài)內(nèi)容。這看起來再正常不過了,但實(shí)際上這是很低效的流程,我們把上面的這種情形抽象成下面的過程:

read(file, tmp_buf, len);
write(socket, tmp_buf, len);

首先調(diào)用 read() 將靜態(tài)內(nèi)容(這里假設(shè)為文件 A )讀取到 tmp_buf,然后調(diào)用 write() 將 tmp_buf 寫入 Socket,如下圖所示。?

Kafka中所謂的零拷貝技術(shù)是什么

在這個(gè)過程中,文件 A 經(jīng)歷了4次復(fù)制的過程:

  1. 調(diào)用 read() 時(shí),文件 A 中的內(nèi)容被復(fù)制到了內(nèi)核模式下的 Read Buffer 中。

  2. CPU 控制將內(nèi)核模式數(shù)據(jù)復(fù)制到用戶模式下。

  3. 調(diào)用 write() 時(shí),將用戶模式下的內(nèi)容復(fù)制到內(nèi)核模式下的 Socket Buffer 中。

  4. 將內(nèi)核模式下的 Socket Buffer 的數(shù)據(jù)復(fù)制到網(wǎng)卡設(shè)備中傳送。

從上面的過程可以看出,數(shù)據(jù)平白無故地從內(nèi)核模式到用戶模式“走了一圈”,浪費(fèi)了2次復(fù)制過程:第一次是從內(nèi)核模式復(fù)制到用戶模式;第二次是從用戶模式再復(fù)制回內(nèi)核模式,即上面4次過程中的第2步和第3步。而且在上面的過程中,內(nèi)核和用戶模式的上下文的切換也是4次。

如果采用了零拷貝技術(shù),那么應(yīng)用程序可以直接請求內(nèi)核把磁盤中的數(shù)據(jù)傳輸給 Socket,如下圖所示。

Kafka中所謂的零拷貝技術(shù)是什么

零拷貝技術(shù)通過 DMA(Direct Memory Access)技術(shù)將文件內(nèi)容復(fù)制到內(nèi)核模式下的 Read Buffer 中。不過沒有數(shù)據(jù)被復(fù)制到 Socket Buffer,相反只有包含數(shù)據(jù)的位置和長度的信息的文件描述符被加到 Socket Buffer 中。DMA 引擎直接將數(shù)據(jù)從內(nèi)核模式中傳遞到網(wǎng)卡設(shè)備(協(xié)議引擎)。這里數(shù)據(jù)只經(jīng)歷了2次復(fù)制就從磁盤中傳送出去了,并且上下文切換也變成了2次。零拷貝是針對內(nèi)核模式而言的,數(shù)據(jù)在內(nèi)核模式下實(shí)現(xiàn)了零拷貝。

要掌握Kafka的核心實(shí)現(xiàn)原理,不僅僅只是Kafka的日志格式、日志索引、日志清理等方面的內(nèi)容,也包含底層物理存儲(chǔ)相關(guān)的知識(shí)點(diǎn)。

感謝各位的閱讀,以上就是“Kafka中所謂的零拷貝技術(shù)是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Kafka中所謂的零拷貝技術(shù)是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI