欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

如何分析Kafka時(shí)間輪原理

如何分析Kafka時(shí)間輪原理,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。

創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供譙城網(wǎng)站建設(shè)、譙城做網(wǎng)站、譙城網(wǎng)站設(shè)計(jì)、譙城網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、譙城企業(yè)網(wǎng)站模板建站服務(wù),十多年譙城做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

 Kafka時(shí)間輪是Kafka實(shí)現(xiàn)高效的延時(shí)任務(wù)的基礎(chǔ),它模擬了現(xiàn)實(shí)生活中的鐘表對(duì)時(shí)間的表示方式,同時(shí),時(shí)間輪的方式并不僅限于Kafka,它是一種通用的時(shí)間表示方式,本文主要介紹Kafka中的時(shí)間輪原理。

Kafka中存在一些定時(shí)任務(wù)(DelayedOperation),如DelayedFetch、DelayedProduce、DelayedHeartbeat等,在Kafka中,定時(shí)任務(wù)的添加、輪轉(zhuǎn)、執(zhí)行、消亡等是通過時(shí)間輪來實(shí)現(xiàn)的。(時(shí)間輪并不是Kafka獨(dú)有的設(shè)計(jì),而是一種通用的實(shí)現(xiàn)方式,Netty中也有用到時(shí)間輪的方式)

1. 時(shí)間輪是什么

參考網(wǎng)上的兩張圖(摘自 https://blog.csdn.net/u013256816/article/details/80697456)

如何分析Kafka時(shí)間輪原理如何分析Kafka時(shí)間輪原理

這兩張圖就比較清楚的說明了Kafka時(shí)間輪的結(jié)構(gòu)了:類似現(xiàn)實(shí)中的鐘表,由多個(gè)環(huán)形數(shù)組組成,每個(gè)環(huán)形數(shù)組包含20個(gè)時(shí)間單位,表示一個(gè)時(shí)間維度(一輪),如:第一層時(shí)間輪,數(shù)組中的每個(gè)元素代表1ms,一圈就是20ms,當(dāng)延遲時(shí)間大于20ms時(shí),就“進(jìn)位”到第二層時(shí)間輪,第二層中,每“一格”表示20ms,依此類推…

對(duì)于一個(gè)延遲任務(wù),大體包含三個(gè)過程:進(jìn)入時(shí)間輪、降級(jí)和到期執(zhí)行。

  • 進(jìn)入時(shí)間輪

1. 根據(jù)延遲時(shí)間計(jì)算對(duì)應(yīng)的時(shí)間輪“層次”(如鐘表中的“小時(shí)級(jí)”還是“分鐘級(jí)”還是“秒級(jí)”,實(shí)際上是一個(gè)不斷“升級(jí)”的過程,直到找到合適的“層次”)

2. 計(jì)算在該輪中的位置,并插入該位置(每個(gè)bucket是一個(gè)雙向鏈表,可能包含多個(gè)延遲任務(wù),這也是時(shí)間輪提高效率的一大原因,后面會(huì)提到)

3. 若該bucket是首次插入,需要將該bucket加入DelayQueue中(DelayQueue的引入是為了解決“空推進(jìn)”,后面會(huì)提到)

如何分析Kafka時(shí)間輪原理

  • 降級(jí)

1. 當(dāng)時(shí)間“推進(jìn)”到某個(gè)bucket時(shí),說明該bucket中的任務(wù)在當(dāng)前時(shí)間輪中的時(shí)間已經(jīng)走完,需要進(jìn)行“降級(jí)”,即進(jìn)入更小粒度的時(shí)間輪中,reinsert的過程和進(jìn)入時(shí)間輪是類似的

如何分析Kafka時(shí)間輪原理

  • 到期執(zhí)行

1. 在reinsert的過程中,若發(fā)現(xiàn)已經(jīng)到期,則執(zhí)行這些任務(wù)

如何分析Kafka時(shí)間輪原理

整體過程大致如下:

如何分析Kafka時(shí)間輪原理

2. 時(shí)間的“推進(jìn)”

一種直觀的想法是,像現(xiàn)實(shí)中的鐘表一樣,“一格一格”地走,這樣就需要有一個(gè)線程一直不停的執(zhí)行,而大多數(shù)情況下,時(shí)間輪中的bucket大部分是空的,指針的“推進(jìn)”就沒有實(shí)質(zhì)作用,因此,為了減少這種“空推進(jìn)”,Kafka引入了DelayQueue,以bucket為單位入隊(duì),每當(dāng)有bucket到期,即queue.poll能拿到結(jié)果時(shí),才進(jìn)行時(shí)間的“推進(jìn)”,減少了 ExpiredOperationReaper 線程空轉(zhuǎn)的開銷。

如何分析Kafka時(shí)間輪原理

3. 為什么要用時(shí)間輪

用到延遲任務(wù)時(shí),比較直接的想法是DelayQueue、ScheduledThreadPoolExecutor 這些,而時(shí)間輪相比之下,最大的優(yōu)勢(shì)是在時(shí)間復(fù)雜度上:

時(shí)間復(fù)雜度對(duì)比:

如何分析Kafka時(shí)間輪原理

因此,理論上,當(dāng)任務(wù)較多時(shí),TimingWheel的時(shí)間性能優(yōu)勢(shì)會(huì)更明顯

總結(jié)一下Kafka時(shí)間輪性能高的幾個(gè)主要原因:

(1)時(shí)間輪的結(jié)構(gòu)+雙向列表bucket,使得插入操作可以達(dá)到O(1)的時(shí)間復(fù)雜度

(2)Bucket的設(shè)計(jì)讓多個(gè)任務(wù)“合并”,使得同一個(gè)bucket的多次插入只需要在delayQueue中入隊(duì)一次,同時(shí)減少了delayQueue中元素?cái)?shù)量,堆的深度也減小,delayqueue的插入和彈出操作開銷也更小

關(guān)于如何分析Kafka時(shí)間輪原理問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。

新聞名稱:如何分析Kafka時(shí)間輪原理
文章出自:http://chinadenli.net/article2/jigooc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷定制網(wǎng)站外貿(mào)網(wǎng)站建設(shè)手機(jī)網(wǎng)站建設(shè)App開發(fā)電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司