成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

大數據開發最火技術Kafka背后的“黑科技”

企業動態 Kafka
Kafka是由Apache軟件基金會開發的一個開源流處理平臺,被廣泛地應用在數據緩沖、異步通信、匯集日志、系統解耦等方面。相比較于其他常見消息系統,Kafka在保障了大部分功能特性的同時,還在高吞吐、低延遲等方面有很突出的表現。

Kafka是由Apache軟件基金會開發的一個開源流處理平臺,被廣泛地應用在數據緩沖、異步通信、匯集日志、系統解耦等方面。相比較于其他常見消息系統,Kafka在保障了大部分功能特性的同時,還在高吞吐、低延遲等方面有很突出的表現。這篇文章不同于其他介紹Kafka使用或實現的文章,只是談談Kafka用了什么“黑科技”使他在性能方面有這么突出的表現。

  • 消息順序寫入磁盤

磁盤大多數都還是機械結構(SSD不在討論的范圍內),如果將消息以隨機寫的方式存入磁盤,就需要按柱面、磁頭、扇區的方式尋址,尋址是一個“機械動作”也最耗時。為了提高讀寫硬盤的速度,Kafka就是使用順序I/O。  

圖 1 Kafka順序IO

上圖中,每個partition就是一個文件,每條消息都被append 到該 partition 中,屬于順序寫磁盤,因此效率非常高。這種方法有一個缺陷—— 沒有辦法刪除數據 ,所以Kafka是不會刪除數據的,它會把所有的數據都保留下來,每個消費者(Consumer)對每個Topic都有一個offset用來表示讀取到了第幾條數據 。

關于磁盤順序讀寫和隨機讀寫的性能,引用一組Kafka官方給出的測試數據(Raid-5,7200rpm):

  • Sequence I/O: 600MB/s
  • Random I/O: 100KB/s

所以通過只做Sequence I/O,給Kafka帶來了性能的極大提升。

  • Zero Copy

考慮一個web程序讀取文件內容并傳輸到網絡的場景,實現的核心代碼如下:

 

圖 2 普通read方法

雖然只是兩個調用,但卻經過了4次copy,其中有2次cpu copy,還有多次用戶態與內核態的上下文切換,這會加重cpu的負擔,而零拷貝就是為了解決這種低效。

# mmap:

減少拷貝次數的一種方法是調用mmap()來代替read()調用:


應用程序調用mmap(),磁盤上的數據會通過DMA被拷貝到內核緩沖區,接著操作系統會把這段內核緩沖區與應用程序共享,這樣就不需要把內核緩沖區的內容往用戶空間拷貝。應用程序再調用write(),操作系統直接將內核緩沖區的內容拷貝到socket緩沖區中,最后再把數據發到網卡去。 

圖 3 mmap方法

使用mmap可以減少一次cpu copy,但也會遇到一些陷阱,當你的程序map了一個文件,但是當這個文件被另一個進程截斷(truncate)時, write系統調用會因為訪問非法地址而被SIGBUS信號終止。通常可以通過,為SIGBUS信號建立信號處理程序或使用文件租憑(file leasing)的方式去解決,這里就不再贅述了。

# sendfile:

從2.1版內核開始,Linux引入了sendfile來簡化操作


 

圖 4 sendfile方法

sendfile() 方法引發 DMA 引擎將文件內容拷貝到一個讀取緩沖區(DMA copy)然后由內核將數據拷貝到socket buffer(cpu copy)最后再拷貝到網卡(DMA copy)使用sendfile不僅減少了數據拷貝的次數,還減少了上下文切換,數據傳送始終只發生在kernel space

聊到這里,sendfile至少還需要一次cpu copy,那么這一步能不能省去呢?為了消除內核完成的所有數據復制,我們需要一個支持收集(gather)操作的網絡接口。同時,在內核版本2.4中,也修改了套接字緩沖區描述符以適應零拷貝要求。 這種方法不僅減少了多個上下文切換,還完全取消了cpu copy。 

圖 5 sendfile方法(DMA gather)

sendfile系統調用利用DMA引擎將文件內容拷貝到內核緩沖區去,然后將帶有文件位置和長度信息的緩沖區描述符添加socket緩沖區去,這一步不會將內核中的數據拷貝到socket緩沖區中,DMA引擎會將內核緩沖區的數據拷貝到協議引擎中去,避免了最后一次CPU拷貝。

零拷貝技術非常普遍,JAVA的transferTo、transferFrom方法就是Zero Copy。

【本文是51CTO專欄機構“AiChinaTech”的原創文章,微信公眾號( id: tech-AI)”】

戳這里,看該作者更多好文

 

責任編輯:華軒 來源: 51CTO專欄
相關推薦

2016-11-14 11:08:06

戴爾服務器

2023-11-13 14:53:23

2016-01-29 17:53:20

Taste?Analy大數據云計算

2017-03-24 16:45:34

銳捷

2018-03-28 09:35:16

數據系統云服務

2015-06-18 05:55:05

大數據大數據背后的事

2023-05-17 07:42:11

2020-10-09 07:19:30

芯片

2016-07-07 15:38:07

京東

2015-12-28 10:56:10

react nativ前端

2015-12-28 11:09:17

React Nativ前端

2020-07-24 10:37:11

天翼云

2023-04-03 11:25:40

系統無人車

2016-06-16 09:40:30

史上最嚴高考寶德服務器

2014-06-11 09:27:08

Docker云計算

2014-01-08 09:46:49

云計算大數據社交網絡

2023-05-04 15:57:33

大數據供應鏈

2023-12-04 14:02:43

大數據信息分析

2013-03-01 10:45:36

Nike大數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美性一区二区三区 | 日韩电影中文字幕 | 日韩激情免费 | 欧美精品久久久久 | 国精产品一区二区三区 | 天天操天天舔 | 狠狠色香婷婷久久亚洲精品 | 亚洲影音先锋 | 国产视频1区2区 | 伊人网站在线观看 | 91精品入口蜜桃 | 91精品国产91久久久久游泳池 | 一级a毛片| 小h片免费观看久久久久 | 日韩一级电影免费观看 | 懂色一区二区三区免费观看 | 久久精品网 | 国产日韩欧美激情 | 黑色丝袜三级在线播放 | 精品国模一区二区三区欧美 | 欧美a∨| 国产精品永久免费 | 天天操操操操操 | 手机看片169 | 丁香婷婷综合激情五月色 | 欧美黄色一区 | 欧美一级在线观看 | 欧美日韩精品在线一区 | www.99热 | 夜夜夜夜夜夜曰天天天 | 国产精品成人在线 | 91精品久久久 | 国产日韩精品在线 | 国产成人免费视频网站视频社区 | 拍拍无遮挡人做人爱视频免费观看 | 少妇一级淫片免费放播放 | 亚洲福利在线观看 | 亚洲高清一区二区三区 | 成人午夜黄色 | 中文字幕一页二页 | 亚洲小视频在线播放 |