最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中的Kafka為什么性能這么快及4大核心詳析

 更新時(shí)間:2022年09月22日 11:23:08   作者:mikechen的互聯(lián)網(wǎng)架構(gòu)  
這篇文章主要介紹了Java中的Kafka為什么性能這么快及4大核心詳析,文章通過(guò)圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

Kafka的性能快這是大廠Java面試經(jīng)常問(wèn)的一個(gè)話題,下面我就重點(diǎn)講解Kafka為什么性能這么快的4大核心原因

1、頁(yè)緩存技術(shù)

Kafka 是基于操作系統(tǒng) 的頁(yè)緩存(page cache)來(lái)實(shí)現(xiàn)文件寫入的,我們也可以稱之為 os cache,意思就是操作系統(tǒng)自己管理的緩存。

Kafka 在寫入磁盤文件的時(shí)候,可以直接寫入這個(gè) os cache 里,也就是僅僅寫入內(nèi)存中,接下來(lái)由操作系統(tǒng)自己決定什么時(shí)候把 os cache 里的數(shù)據(jù)真的刷入磁盤文件中。

通過(guò)這一個(gè)步驟,就可以將磁盤文件寫性能提升很多了,因?yàn)槠鋵?shí)這里相當(dāng)于是在寫內(nèi)存,不是在寫磁盤,原理圖如下:

2、磁盤順序?qū)?/h2>

另一個(gè)主要功能是 kafka 寫數(shù)據(jù)的時(shí)候,是以磁盤順序?qū)懙姆绞絹?lái)寫的,也就是說(shuō)僅僅將數(shù)據(jù)追加到文件的末尾,不是在文件的隨機(jī)位置來(lái)修改數(shù)據(jù)。

為什么要采用磁盤順序?qū)懀?/strong>

完成一次磁盤 IO,需要經(jīng)過(guò)尋道、旋轉(zhuǎn)和數(shù)據(jù)傳輸三個(gè)步驟:

  • 尋道(時(shí)間):磁頭移動(dòng)定位到指定磁道;
  • 旋轉(zhuǎn)延遲(時(shí)間):等待指定扇區(qū)從磁頭下旋轉(zhuǎn)經(jīng)過(guò);
  • 數(shù)據(jù)傳輸(時(shí)間):數(shù)據(jù)在磁盤、內(nèi)存與網(wǎng)絡(luò)之間的實(shí)際傳輸。

首先必須找到柱面,即磁頭需要移動(dòng)對(duì)準(zhǔn)相應(yīng)磁道,這個(gè)過(guò)程叫做尋道,所耗費(fèi)時(shí)間叫做尋道時(shí)間,然后目標(biāo)扇區(qū)旋轉(zhuǎn)到磁頭下,這個(gè)過(guò)程耗費(fèi)的時(shí)間叫做旋轉(zhuǎn)時(shí)間。

怎么樣才能提高磁盤的讀寫效率呢?

即采用磁盤順序?qū)懀@樣就不需要尋道時(shí)間,只需很少的旋轉(zhuǎn)時(shí)間,將數(shù)據(jù)追加到文件的末尾,不是在文件的隨機(jī)位置來(lái)修改數(shù)據(jù)。

基于上面兩點(diǎn),kafka 就實(shí)現(xiàn)了寫入數(shù)據(jù)的超高性能。

3、零拷貝

先來(lái)看看非零拷貝的情況,如下圖所示:

可以看到數(shù)據(jù)的拷貝從內(nèi)存拷貝到 Kafka 服務(wù)進(jìn)程那塊,又拷貝到 Socket 緩存那塊,整個(gè)過(guò)程耗費(fèi)的時(shí)間比較高。

Kafka 利用了 Linux 的 sendFile 技術(shù)(NIO),省去了進(jìn)程切換和一次數(shù)據(jù)拷貝,讓性能變得更好,

如下圖所示:

通過(guò) 零拷貝技術(shù),就不需要把 os cache 里的數(shù)據(jù)拷貝到應(yīng)用緩存,再?gòu)膽?yīng)用緩存拷貝到 Socket 緩存了,兩次拷貝都省略了,所以叫做零拷貝。

4、分區(qū)分段+索引

Kafka 的 message 是按 topic分 類存儲(chǔ)的,topic 中的數(shù)據(jù)又是按照一個(gè)一個(gè)的 partition 即分區(qū)存儲(chǔ)到不同 broker 節(jié)點(diǎn)。每個(gè) partition 對(duì)應(yīng)了操作系統(tǒng)上的一個(gè)文件夾,partition 實(shí)際上又是按照segment分段存儲(chǔ)的。

通過(guò)這種分區(qū)分段的設(shè)計(jì),Kafka 的 message 消息實(shí)際上是分布式存儲(chǔ)在一個(gè)一個(gè)小的 segment 中的,每次文件操作也是直接操作的 segment。為了進(jìn)一步的查詢優(yōu)化,Kafka 又默認(rèn)為分段后的數(shù)據(jù)文件建立了索引文件,就是文件系統(tǒng)上的.index文件。這種分區(qū)分段+索引的設(shè)計(jì),不僅提升了數(shù)據(jù)讀取的效率,同時(shí)也提高了數(shù)據(jù)操作的并行度。

到此這篇關(guān)于Java中的Kafka為什么性能這么快及4大核心詳析的文章就介紹到這了,更多相關(guān)Java Kafka內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA設(shè)計(jì)模式之調(diào)停者模式詳解

    JAVA設(shè)計(jì)模式之調(diào)停者模式詳解

    這篇文章主要介紹了JAVA設(shè)計(jì)模式之調(diào)停者模式詳解,調(diào)停者模式是對(duì)象的行為模式,調(diào)停者模式包裝了一系列對(duì)象相互作用的方式,使得這些對(duì)象不必相互明顯引用,從而使它們可以較松散地耦合,需要的朋友可以參考下
    2015-04-04
  • Spring?Boot項(xiàng)目中遇到`if-else`語(yǔ)句七種具體使用方法解析

    Spring?Boot項(xiàng)目中遇到`if-else`語(yǔ)句七種具體使用方法解析

    當(dāng)在Spring?Boot項(xiàng)目中遇到大量if-else語(yǔ)句時(shí),優(yōu)化這些代碼變得尤為重要,因?yàn)樗鼈儾粌H增加了維護(hù)難度,還可能影響應(yīng)用程序的可讀性和性能,以下是七種具體的方法,用于在Spring?Boot項(xiàng)目中優(yōu)化和重構(gòu)if-else語(yǔ)句,感興趣的朋友一起看看吧
    2024-07-07
  • spring項(xiàng)目自定義全局響應(yīng)處理器統(tǒng)一處理響應(yīng)結(jié)果的實(shí)現(xiàn)步驟

    spring項(xiàng)目自定義全局響應(yīng)處理器統(tǒng)一處理響應(yīng)結(jié)果的實(shí)現(xiàn)步驟

    本文詳細(xì)描述了如何通過(guò)@ControllerAdvice和ResponseBodyAdvice在SpringMVC項(xiàng)目中創(chuàng)建自定義響應(yīng)處理器,以及如何使用Wrapper類包裝和標(biāo)準(zhǔn)化返回結(jié)果,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 詳解Java線程池的使用(7種創(chuàng)建方法)

    詳解Java線程池的使用(7種創(chuàng)建方法)

    這篇文章主要介紹了詳解Java線程池的使用(7種創(chuàng)建方法),線程池的創(chuàng)建?式總共包含7種,其中6種是通過(guò)Executors創(chuàng)建的,1種是通過(guò)ThreadPoolExecutor創(chuàng)建的,今天我們就來(lái)詳細(xì)說(shuō)一下
    2023-03-03
  • Java?+?Selenium?+?OpenCV解決自動(dòng)化測(cè)試中的滑塊驗(yàn)證問(wèn)題

    Java?+?Selenium?+?OpenCV解決自動(dòng)化測(cè)試中的滑塊驗(yàn)證問(wèn)題

    OpenCV是一個(gè)基于Apache2.0許可(開源)發(fā)行的跨平臺(tái)計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),可以運(yùn)行在Linux、Windows、Android和Mac?OS操作系統(tǒng)上,這篇文章主要介紹了Java?+?Selenium?+?OpenCV解決自動(dòng)化測(cè)試中的滑塊驗(yàn)證,需要的朋友可以參考下
    2022-07-07
  • 聊聊mybatis sql的括號(hào)問(wèn)題

    聊聊mybatis sql的括號(hào)問(wèn)題

    這篇文章主要介紹了mybatis sql的括號(hào)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • JPA多數(shù)據(jù)源分布式事務(wù)處理方案

    JPA多數(shù)據(jù)源分布式事務(wù)處理方案

    這篇文章主要為大家介紹了JPA多數(shù)據(jù)源分布式事務(wù)處理的兩種事務(wù)方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • SpringBoot整合POI導(dǎo)出通用Excel的方法示例

    SpringBoot整合POI導(dǎo)出通用Excel的方法示例

    這篇文章主要介紹了SpringBoot整合POI導(dǎo)出通用Excel的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • java開放地址法和鏈地址法解決hash沖突的方法示例

    java開放地址法和鏈地址法解決hash沖突的方法示例

    這篇文章主要介紹了java開放地址法和鏈地址法解決hash沖突的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • Spring Boot 工程的創(chuàng)建和運(yùn)行(圖文)

    Spring Boot 工程的創(chuàng)建和運(yùn)行(圖文)

    這篇文章主要介紹了Spring Boot 工程的創(chuàng)建和運(yùn)行(圖文),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02

最新評(píng)論

水城县| 元阳县| 水富县| 浦江县| 黄浦区| 河南省| 商城县| 睢宁县| 永靖县| 赫章县| 平陆县| 彭山县| 交城县| 桑植县| 成武县| 吴忠市| 醴陵市| 合肥市| 三都| 同德县| 察隅县| 陵川县| 霞浦县| 喀喇| 广元市| 鄂托克前旗| 海门市| 上蔡县| 手游| 富平县| 乐清市| 闸北区| 连云港市| 盐津县| 巴南区| 华池县| 勃利县| 五原县| 奇台县| 库伦旗| 新和县|