91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

大數(shù)據(jù)開(kāi)發(fā)最火技術(shù)Kafka背后的“黑科技”

張康康 ? 2019-10-22 17:53 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Kafka是由Apache軟件基金會(huì)開(kāi)發(fā)的一個(gè)開(kāi)源流處理平臺(tái),被廣泛地應(yīng)用在數(shù)據(jù)緩沖、異步通信、匯集日志、系統(tǒng)解耦等方面。相比較于其他常見(jiàn)消息系統(tǒng),Kafka在保障了大部分功能特性的同時(shí),還在高吞吐、低延遲等方面有很突出的表現(xiàn)。這篇文章不同于其他介紹Kafka使用或?qū)崿F(xiàn)的文章,只是談?wù)凨afka用了什么“黑科技”使他在性能方面有這么突出的表現(xiàn)。

  • 消息順序?qū)懭氪疟P(pán)

磁盤(pán)大多數(shù)都還是機(jī)械結(jié)構(gòu)(SSD不在討論的范圍內(nèi)),如果將消息以隨機(jī)寫(xiě)的方式存入磁盤(pán),就需要按柱面、磁頭、扇區(qū)的方式尋址,尋址是一個(gè)“機(jī)械動(dòng)作”也最耗時(shí)。為了提高讀寫(xiě)硬盤(pán)的速度,Kafka就是使用順序I/O。

圖 1 Kafka順序IO

上圖中,每個(gè)partition就是一個(gè)文件,每條消息都被append 到該 partition 中,屬于順序?qū)懘疟P(pán),因此效率非常高。這種方法有一個(gè)缺陷—— 沒(méi)有辦法刪除數(shù)據(jù) ,所以Kafka是不會(huì)刪除數(shù)據(jù)的,它會(huì)把所有的數(shù)據(jù)都保留下來(lái),每個(gè)消費(fèi)者(Consumer)對(duì)每個(gè)Topic都有一個(gè)offset用來(lái)表示讀取到了第幾條數(shù)據(jù) 。

關(guān)于磁盤(pán)順序讀寫(xiě)和隨機(jī)讀寫(xiě)的性能,引用一組Kafka官方給出的測(cè)試數(shù)據(jù)(Raid-5,7200rpm):

Sequence I/O: 600MB/s

Random I/O: 100KB/s

所以通過(guò)只做Sequence I/O,給Kafka帶來(lái)了性能的極大提升。

  • Zero Copy

考慮一個(gè)web程序讀取文件內(nèi)容并傳輸?shù)骄W(wǎng)絡(luò)的場(chǎng)景,實(shí)現(xiàn)的核心代碼如下:

圖 2 普通read方法

雖然只是兩個(gè)調(diào)用,但卻經(jīng)過(guò)了4次copy,其中有2次cpu copy,還有多次用戶態(tài)與內(nèi)核態(tài)的上下文切換,這會(huì)加重cpu的負(fù)擔(dān),而零拷貝就是為了解決這種低效。

# mmap:

減少拷貝次數(shù)的一種方法是調(diào)用mmap()來(lái)代替read()調(diào)用:

應(yīng)用程序調(diào)用mmap(),磁盤(pán)上的數(shù)據(jù)會(huì)通過(guò)DMA被拷貝到內(nèi)核緩沖區(qū),接著操作系統(tǒng)會(huì)把這段內(nèi)核緩沖區(qū)與應(yīng)用程序共享,這樣就不需要把內(nèi)核緩沖區(qū)的內(nèi)容往用戶空間拷貝。應(yīng)用程序再調(diào)用write(),操作系統(tǒng)直接將內(nèi)核緩沖區(qū)的內(nèi)容拷貝到socket緩沖區(qū)中,最后再把數(shù)據(jù)發(fā)到網(wǎng)卡去。

圖 3 mmap方法

使用mmap可以減少一次cpu copy,但也會(huì)遇到一些陷阱,當(dāng)你的程序map了一個(gè)文件,但是當(dāng)這個(gè)文件被另一個(gè)進(jìn)程截?cái)?truncate)時(shí), write系統(tǒng)調(diào)用會(huì)因?yàn)樵L問(wèn)非法地址而被SIGBUS信號(hào)終止。通常可以通過(guò),為SIGBUS信號(hào)建立信號(hào)處理程序或使用文件租憑(file leasing)的方式去解決,這里就不再贅述了。

# sendfile:

從2.1版內(nèi)核開(kāi)始,Linux引入了sendfile來(lái)簡(jiǎn)化操作

圖 4 sendfile方法

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

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

圖 5 sendfile方法(DMA gather)

sendfile系統(tǒng)調(diào)用利用DMA引擎將文件內(nèi)容拷貝到內(nèi)核緩沖區(qū)去,然后將帶有文件位置和長(zhǎng)度信息的緩沖區(qū)描述符添加socket緩沖區(qū)去,這一步不會(huì)將內(nèi)核中的數(shù)據(jù)拷貝到socket緩沖區(qū)中,DMA引擎會(huì)將內(nèi)核緩沖區(qū)的數(shù)據(jù)拷貝到協(xié)議引擎中去,避免了最后一次CPU拷貝。

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


聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    工程師之夜系列分享第三十九篇:Kafka、RocketMQ、JMQ 存儲(chǔ)架構(gòu)深度對(duì)比

    開(kāi)源,金融級(jí)特性突出)、JMQ(京東開(kāi)源,側(cè)重高可用與靈活性),從存儲(chǔ)模型、數(shù)據(jù)組織、索引設(shè)計(jì)等維度展開(kāi)深度對(duì)比,為技術(shù)選型與架構(gòu)優(yōu)化提供參考。? 本文將從概念辨析出發(fā),系統(tǒng)拆解主流存儲(chǔ)模型與存儲(chǔ)引擎的設(shè)計(jì)邏輯,對(duì)比 JMQ、Kafka
    的頭像 發(fā)表于 01-13 16:19 ?197次閱讀
    工程師之夜系列分享第三十九篇:<b class='flag-5'>Kafka</b>、RocketMQ、JMQ 存儲(chǔ)架構(gòu)深度對(duì)比

    大數(shù)據(jù)解決方案如何實(shí)施

    大數(shù)據(jù)解決方案實(shí)施的難點(diǎn)在于以下幾點(diǎn): ?1.很少有優(yōu)質(zhì)可用的數(shù)據(jù) ?在數(shù)聚股份看來(lái),這幾年數(shù)據(jù)交易機(jī)構(gòu)如雨后春筍,“數(shù)據(jù)變現(xiàn)”成為很多擁有數(shù)據(jù)
    的頭像 發(fā)表于 12-25 18:22 ?1061次閱讀

    大數(shù)據(jù)平臺(tái)運(yùn)營(yíng)的基礎(chǔ)是什么

    ,值得每一位企業(yè)運(yùn)營(yíng)者思考。 本文提供大數(shù)據(jù)平臺(tái)運(yùn)營(yíng)的三元素模型,旨在幫助企業(yè)管理層以全面的視角審視企業(yè)當(dāng)前正在建設(shè)的大數(shù)據(jù)體系,真正地實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)。 1. ? ?大數(shù)據(jù)平臺(tái)的
    的頭像 發(fā)表于 12-23 16:07 ?244次閱讀

    揭秘施耐德電氣中壓開(kāi)關(guān)背后科技

    關(guān)乎電力系統(tǒng)運(yùn)行的安全與可靠。看似常規(guī)的操作背后,每一次可靠動(dòng)作都絕非偶然——它不僅是現(xiàn)代工業(yè)制造實(shí)力的體現(xiàn),也是前沿技術(shù)與百年電氣技術(shù)經(jīng)驗(yàn)深度融合的結(jié)晶。
    的頭像 發(fā)表于 12-12 15:20 ?510次閱讀

    AI時(shí)代大數(shù)據(jù)背后的網(wǎng)絡(luò)力量-上海兆越100G核心工業(yè)交換機(jī)

    AI大數(shù)據(jù)與云計(jì)算的全球普及,讓海量數(shù)據(jù)實(shí)時(shí)傳輸處理成為各行業(yè)數(shù)字化轉(zhuǎn)型的核心挑戰(zhàn),工業(yè)通信網(wǎng)絡(luò)面臨巨大數(shù)據(jù)壓力。工業(yè)交換機(jī)作為數(shù)據(jù)傳輸?shù)暮诵妮d體,既能實(shí)現(xiàn)設(shè)備互聯(lián),又以高效穩(wěn)定的網(wǎng)絡(luò)
    的頭像 發(fā)表于 11-18 17:33 ?2680次閱讀
    AI時(shí)代<b class='flag-5'>大數(shù)據(jù)</b><b class='flag-5'>背后</b>的網(wǎng)絡(luò)力量-上海兆越100G核心工業(yè)交換機(jī)

    充電樁背后藏著多少科技?國(guó)內(nèi)的充電樁安全嗎?

    隨著新能源汽車駛?cè)肭Ъ胰f(wàn)戶,為它們“補(bǔ)充能量”的充電樁已成為我們生活中常見(jiàn)的基礎(chǔ)設(shè)施。這個(gè)看似簡(jiǎn)單的“大插座”背后,實(shí)則凝聚了多項(xiàng)前沿技術(shù),而其安全性更是廣大車主和社會(huì)關(guān)注的焦點(diǎn)。 一、 充電樁里
    的頭像 發(fā)表于 11-04 13:46 ?881次閱讀

    湖北大數(shù)據(jù)集團(tuán)到訪維智科技參觀交流

    近日,湖北大數(shù)據(jù)集團(tuán)有限公司黨委書(shū)記、董事長(zhǎng)汪小波率隊(duì)到訪維智科技。雙方圍繞時(shí)空數(shù)據(jù)融合、公共數(shù)據(jù)授權(quán)運(yùn)營(yíng)及行業(yè)應(yīng)用場(chǎng)景開(kāi)發(fā)等議題展開(kāi)深入探討。
    的頭像 發(fā)表于 11-03 10:02 ?645次閱讀

    組態(tài)大數(shù)據(jù)平臺(tái)是什么?有什么功能?

    組態(tài)大數(shù)據(jù)平臺(tái)是融合 組態(tài)技術(shù)大數(shù)據(jù)處理能力 的綜合性平臺(tái),通過(guò)圖形化、可配置的方式實(shí)現(xiàn)數(shù)據(jù)采集、存儲(chǔ)、分析、可視化及遠(yuǎn)程控制,適用于工業(yè)自動(dòng)化、能源管理、樓宇監(jiān)控等領(lǐng)域。其核心
    的頭像 發(fā)表于 10-30 11:29 ?234次閱讀
    組態(tài)<b class='flag-5'>大數(shù)據(jù)</b>平臺(tái)是什么?有什么功能?

    微電子登陸2025深圳安博會(huì)——安防有我,共見(jiàn)芯

    全球規(guī)模最大、最具影響力的安防行業(yè)盛會(huì)——第二十屆中國(guó)國(guó)際社會(huì)公共安全博覽會(huì)(CPSE2025)于2025年10月28日-31日在深圳會(huì)展中心盛大啟幕!大會(huì)聚焦AI傳感、物聯(lián)網(wǎng)、5G、大數(shù)據(jù)技術(shù)
    的頭像 發(fā)表于 10-29 10:21 ?529次閱讀
    芯<b class='flag-5'>火</b>微電子登陸2025深圳安博會(huì)——安防有我,共見(jiàn)芯<b class='flag-5'>火</b>

    御控工業(yè)物聯(lián)網(wǎng)大數(shù)據(jù)解決方案:排水設(shè)備遠(yuǎn)程監(jiān)控與大數(shù)據(jù)統(tǒng)計(jì)系統(tǒng)

    御控工業(yè)物聯(lián)網(wǎng)推出排水設(shè)備遠(yuǎn)程監(jiān)控與大數(shù)據(jù)統(tǒng)計(jì)系統(tǒng),通過(guò)物聯(lián)網(wǎng)、大數(shù)據(jù)、云計(jì)算等技術(shù)構(gòu)建“感知-傳輸-分析-決策”閉環(huán)管理體系,助力排水行業(yè)數(shù)字化轉(zhuǎn)型。
    的頭像 發(fā)表于 09-12 10:04 ?682次閱讀

    ?Groq LPU 如何讓萬(wàn)億參數(shù)模型「飛」起來(lái)?揭秘 Kimi K2 40 倍提速背后科技

    Groq LPU 如何讓萬(wàn)億參數(shù)模型「飛」起來(lái)?揭秘 Kimi K2 40 倍提速背后科技? 最近,Moonshot AI 的千億參數(shù)大模型 ?Kimi K2? 在 ?GroqCloud? 上
    的頭像 發(fā)表于 08-07 10:01 ?999次閱讀

    揭秘Air8000對(duì)講科技:AirTalk+MQTT開(kāi)發(fā)示例深度解析

    的實(shí)時(shí)傳輸,帶你深度理解這一科技背后技術(shù)奧秘。 Air8000 系列的 Airtalk 是基于 LuatOS 核心庫(kù)的對(duì)講方案,采用 MQTT 協(xié)議實(shí)現(xiàn)設(shè)備端、手機(jī)端、網(wǎng)頁(yè)端的跨終端對(duì)講,支持服務(wù)器
    的頭像 發(fā)表于 08-06 17:16 ?794次閱讀
    揭秘Air8000對(duì)講<b class='flag-5'>黑</b>科技:AirTalk+MQTT<b class='flag-5'>開(kāi)發(fā)</b>示例深度解析

    Kafka生產(chǎn)環(huán)境應(yīng)用方案

    Apache Kafka作為分布式流處理平臺(tái),在現(xiàn)代大數(shù)據(jù)架構(gòu)中扮演著消息中間件的核心角色。本文將從運(yùn)維工程師的角度,詳細(xì)介紹Kafka在生產(chǎn)環(huán)境中的部署方案、配置優(yōu)化、監(jiān)控運(yùn)維等關(guān)鍵技術(shù)
    的頭像 發(fā)表于 07-09 09:56 ?593次閱讀

    更改最大數(shù)據(jù)包大小時(shí)無(wú)法識(shí)別USB設(shè)備如何解決?

    將生產(chǎn)者 EP 端點(diǎn)描述符中的最大數(shù)據(jù)包大小從 1024 字節(jié)更改為 512 字節(jié)時(shí),無(wú)法識(shí)別 USB 設(shè)備。 請(qǐng)告知如何解決這個(gè)問(wèn)題。
    發(fā)表于 05-20 08:13

    Kafka工作流程及文件存儲(chǔ)機(jī)制

    Kafka 中消息是以 topic 進(jìn)行分類的,生產(chǎn)者生產(chǎn)消息,消費(fèi)者消費(fèi)消息,都是面向 topic 的。
    的頭像 發(fā)表于 05-19 10:14 ?946次閱讀
    <b class='flag-5'>Kafka</b>工作流程及文件存儲(chǔ)機(jī)制