91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何分析Kafka時間輪原理

發布時間:2021-12-03 18:26:26 來源:億速云 閱讀:145 作者:柒染 欄目:云計算

如何分析Kafka時間輪原理,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

 Kafka時間輪是Kafka實現高效的延時任務的基礎,它模擬了現實生活中的鐘表對時間的表示方式,同時,時間輪的方式并不僅限于Kafka,它是一種通用的時間表示方式,本文主要介紹Kafka中的時間輪原理。

Kafka中存在一些定時任務(DelayedOperation),如DelayedFetch、DelayedProduce、DelayedHeartbeat等,在Kafka中,定時任務的添加、輪轉、執行、消亡等是通過時間輪來實現的。(時間輪并不是Kafka獨有的設計,而是一種通用的實現方式,Netty中也有用到時間輪的方式)

1. 時間輪是什么

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

如何分析Kafka時間輪原理如何分析Kafka時間輪原理

這兩張圖就比較清楚的說明了Kafka時間輪的結構了:類似現實中的鐘表,由多個環形數組組成,每個環形數組包含20個時間單位,表示一個時間維度(一輪),如:第一層時間輪,數組中的每個元素代表1ms,一圈就是20ms,當延遲時間大于20ms時,就“進位”到第二層時間輪,第二層中,每“一格”表示20ms,依此類推…

對于一個延遲任務,大體包含三個過程:進入時間輪、降級和到期執行。

  • 進入時間輪

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

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

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

如何分析Kafka時間輪原理

  • 降級

1. 當時間“推進”到某個bucket時,說明該bucket中的任務在當前時間輪中的時間已經走完,需要進行“降級”,即進入更小粒度的時間輪中,reinsert的過程和進入時間輪是類似的

如何分析Kafka時間輪原理

  • 到期執行

1. 在reinsert的過程中,若發現已經到期,則執行這些任務

如何分析Kafka時間輪原理

整體過程大致如下:

如何分析Kafka時間輪原理

2. 時間的“推進”

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

如何分析Kafka時間輪原理

3. 為什么要用時間輪

用到延遲任務時,比較直接的想法是DelayQueue、ScheduledThreadPoolExecutor 這些,而時間輪相比之下,最大的優勢是在時間復雜度上:

時間復雜度對比:

如何分析Kafka時間輪原理

因此,理論上,當任務較多時,TimingWheel的時間性能優勢會更明顯

總結一下Kafka時間輪性能高的幾個主要原因:

(1)時間輪的結構+雙向列表bucket,使得插入操作可以達到O(1)的時間復雜度

(2)Bucket的設計讓多個任務“合并”,使得同一個bucket的多次插入只需要在delayQueue中入隊一次,同時減少了delayQueue中元素數量,堆的深度也減小,delayqueue的插入和彈出操作開銷也更小

關于如何分析Kafka時間輪原理問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

内江市| 信丰县| 金昌市| 年辖:市辖区| 彰化市| 台中县| 万载县| 荆门市| 山东| 綦江县| 鄂伦春自治旗| 临江市| 元氏县| 昌乐县| 婺源县| 铜川市| 奉化市| 息烽县| 手游| 正镶白旗| 荆州市| 郸城县| 盐池县| 塔城市| 迭部县| 千阳县| 白河县| 古丈县| 璧山县| 锡林浩特市| 黎川县| 宁安市| 平谷区| 荔波县| 伊川县| 香港| 同心县| 黔西县| 奈曼旗| 蓬溪县| 平原县|