欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

1、頁緩存技術(shù)

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

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

通過這一個步驟,就可以將磁盤文件寫性能提升很多了,因為其實這里相當(dāng)于是在寫內(nèi)存,不是在寫磁盤,原理圖如下:

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

另一個主要功能是 kafka 寫數(shù)據(jù)的時候,是以磁盤順序?qū)懙姆绞絹韺懙模簿褪钦f僅僅將數(shù)據(jù)追加到文件的末尾,不是在文件的隨機位置來修改數(shù)據(jù)。

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

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

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

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

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

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

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

3、零拷貝

先來看看非零拷貝的情況,如下圖所示:

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

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

如下圖所示:

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

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

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

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

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

相關(guān)文章

  • Java?中的?clone(?)?和?new哪個效率更高

    Java?中的?clone(?)?和?new哪個效率更高

    很多朋友不太清楚clone()和new那個更快?針對這個問題我百度了好多資料,最終小編總結(jié)下關(guān)于Java?中的?clone(?)?和?new哪個效率更高的問題,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • mybatis/mybatis-plus模糊查詢語句特殊字符轉(zhuǎn)義攔截器的實現(xiàn)

    mybatis/mybatis-plus模糊查詢語句特殊字符轉(zhuǎn)義攔截器的實現(xiàn)

    在開發(fā)中,我們通常會遇到這樣的情況。用戶在錄入信息是錄入了‘%’,而在查詢時無法精確匹配‘%’。究其原因,‘%’是MySQL的關(guān)鍵字,如果我們想要精確匹配‘%’,那么需要對其進(jìn)行轉(zhuǎn)義,本文就詳細(xì)的介紹一下
    2021-11-11
  • Java動態(tài)腳本Groovy獲取Bean技巧

    Java動態(tài)腳本Groovy獲取Bean技巧

    這篇文章主要給大家分享的是Java動態(tài)腳本Groovy獲取Bean技巧,在Java代碼中當(dāng)我們需要一個Bean對象,通常會使用spring中@Autowired注解,用來自動裝配對象。下面我們一起進(jìn)入文章學(xué)習(xí)個表格多 詳細(xì)內(nèi)容吧

    2021-12-12
  • java 對稱二叉樹的判斷

    java 對稱二叉樹的判斷

    這篇文章主要介紹了java 對稱二叉樹的判斷,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Java 實戰(zhàn)項目錘煉之在線美食網(wǎng)站系統(tǒng)的實現(xiàn)流程

    Java 實戰(zhàn)項目錘煉之在線美食網(wǎng)站系統(tǒng)的實現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SSM+jsp+mysql+maven實現(xiàn)一個在線美食網(wǎng)站系統(tǒng),大家可以在過程中查缺補漏,提升水平
    2021-11-11
  • java中File類應(yīng)用遍歷文件夾下所有文件

    java中File類應(yīng)用遍歷文件夾下所有文件

    這篇文章主要為大家詳細(xì)介紹了java中File類應(yīng)用遍歷文件夾下所有文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 淺談Java ThreadPoolExecutor的使用

    淺談Java ThreadPoolExecutor的使用

    今天我們來學(xué)習(xí)一下Java ThreadPoolExecutor的使用,文中有非常詳細(xì)的介紹及代碼示例,對正在學(xué)習(xí)Java的小伙伴們有很大的幫助,需要的朋友可以參考下
    2021-05-05
  • java中g(shù)c算法實例用法

    java中g(shù)c算法實例用法

    在本篇文章里小編給大家整理了一篇關(guān)于java中g(shù)c算法實例用法,有興趣的朋友們可以參考學(xué)習(xí)下。
    2021-01-01
  • Kryo框架使用方法代碼示例

    Kryo框架使用方法代碼示例

    這篇文章主要介紹了Kryo框架的相關(guān)內(nèi)容,文中向大家分享了Kryo框架使用方法代碼示例,小編覺得挺不錯的,希望能給大家一個參考。
    2017-10-10
  • ScheduledThreadPoolExecutor巨坑解決

    ScheduledThreadPoolExecutor巨坑解決

    這篇文章主要為大家介紹了使用ScheduledThreadPoolExecutor遇到的巨坑解決示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02

最新評論