伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Kafka的再平衡機制的三種分區重分配

汽車玩家 ? 來源:oschina ? 作者:oschina ? 2020-05-03 18:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

什么是再平衡

所謂的再平衡,指的是在kafka consumer所訂閱的topic發生變化時發生的一種分區重分配機制。一般有三種情況會觸發再平衡:

consumer group中的新增或刪除某個consumer,導致其所消費的分區需要分配到組內其他的consumer上;

consumer訂閱的topic發生變化,比如訂閱的topic采用的是正則表達式的形式,如test-*此時如果有一個新建了一個topic test-user,那么這個topic的所有分區也是會自動分配給當前的consumer的,此時就會發生再平衡;

consumer所訂閱的topic發生了新增分區的行為,那么新增的分區就會分配給當前的consumer,此時就會觸發再平衡。

Kafka提供的再平衡策略主要有三種:Round Robin,Range和Sticky,默認使用Range。這三種分配策略的主要區別在于:

Round Robin:會采用輪詢的方式將當前所有的分區依次分配給所有的consumer;

Range:首先會計算每個consumer可以消費的分區個數,然后按照順序將指定個數范圍的分區分配給各個consumer;

Sticky:這種分區策略是最新版本中新增的一種策略,其主要實現了兩個目的:

將現有的分區盡可能均衡的分配給各個consumer,存在此目的的原因在于Round Robin和Range分配策略實際上都會導致某幾個consumer承載過多的分區,從而導致消費壓力不均衡;

如果發生再平衡,那么重新分配之后在前一點的基礎上會盡力保證當前未宕機的consumer所消費的分區不會被分配給其他的consumer上;

本文主要會通過幾個示例來對上面講解的三種分區重分配策略的基本實現原理進行講解。

Round Robin

關于Roudn Robin重分配策略,其主要采用的是一種輪詢的方式分配所有的分區,該策略主要實現的步驟如下。這里我們首先假設有三個topic:t0、t1和t2,這三個topic擁有的分區數分別為1、2和3,那么總共有六個分區,這六個分區分別為:t0-0、t1-0、t1-1、t2-0、t2-1和t2-2。這里假設我們有三個consumer:C0、C1和C2,它們訂閱情況為:C0訂閱t0,C1訂閱t0和t1,C2訂閱t0、t1和t2。那么這些分區的分配步驟如下:

1) 首先將所有的partition和consumer按照字典序進行排序,所謂的字典序,就是按照其名稱的字符串順序,那么上面的六個分區和三個consumer排序之后分別為:

Kafka的再平衡機制的三種分區重分配

2) 然后依次以按順序輪詢的方式將這六個分區分配給三個consumer,如果當前consumer沒有訂閱當前分區所在的topic,則輪詢的判斷下一個consumer:

嘗試將t0-0分配給C0,由于C0訂閱了t0,因而可以分配成功;

嘗試將t1-0分配給C1,由于C1訂閱了t1,因而可以分配成功;

嘗試將t1-1分配給C2,由于C2訂閱了t1,因而可以分配成功;

嘗試將t2-0分配給C0,由于C0沒有訂閱t2,因而會輪詢下一個consumer;

嘗試將t2-0分配給C1,由于C1沒有訂閱t2,因而會輪詢下一個consumer;

嘗試將t2-0分配給C2,由于C2訂閱了t2,因而可以分配成功;

同理由于t2-1和t2-2所在的topic都沒有被C0和C1所訂閱,因而都不會分配成功,最終都會分配給C2。

按照上述的步驟將所有的分區都分配完畢之后,最終分區的訂閱情況如下:

Kafka的再平衡機制的三種分區重分配

從上面的步驟分析可以看出,輪詢的策略就是簡單的將所有的partition和consumer按照字典序進行排序之后,然后依次將partition分配給各個consumer,如果當前的consumer沒有訂閱當前的partition,那么就會輪詢下一個consumer,直至最終將所有的分區都分配完畢。但是從上面的分配結果可以看出,輪詢的方式會導致每個consumer所承載的分區數量不一致,從而導致各個consumer壓力不均一。

Range

所謂的Range重分配策略,就是首先會計算各個consumer將會承載的分區數量,然后將指定數量的分區分配給該consumer。這里我們假設有兩個consumer:C0和C1,兩個topic:t0和t1,這兩個topic分別都有三個分區,那么總共的分區有六個:t0-0、t0-1、t0-2、t1-0、t1-1和t1-2。那么Range分配策略將會按照如下步驟進行分區的分配:

需要注意的是,Range策略是按照topic依次進行分配的,比如我們以t0進行講解,其首先會獲取t0的所有分區:t0-0、t0-1和t0-2,以及所有訂閱了該topic的consumer:C0和C1,并且會將這些分區和consumer按照字典序進行排序;

然后按照平均分配的方式計算每個consumer會得到多少個分區,如果沒有除盡,則會將多出來的分區依次計算到前面幾個consumer。比如這里是三個分區和兩個consumer,那么每個consumer至少會得到1個分區,而3除以2后還余1,那么就會將多余的部分依次算到前面幾個consumer,也就是這里的1會分配給第一個consumer,總結來說,那么C0將會從第0個分區開始,分配2個分區,而C1將會從第2個分區開始,分配1個分區;

同理,按照上面的步驟依次進行后面的topic的分配。

最終上面六個分區的分配情況如下:

Kafka的再平衡機制的三種分區重分配

可以看到,如果按照Range分區方式進行分配,其本質上是依次遍歷每個topic,然后將這些topic的分區按照其所訂閱的consumer數量進行平均的范圍分配。這種方式從計算原理上就會導致排序在前面的consumer分配到更多的分區,從而導致各個consumer的壓力不均衡。

Sticky

Sticky策略是新版本中新增的策略,顧名思義,這種策略會保證再分配時已經分配過的分區盡量保證其能夠繼續由當前正在消費的consumer繼續消費,當然,前提是每個consumer所分配的分區數量都大致相同,這樣能夠保證每個consumer消費壓力比較均衡。關于這種分配方式的分配策略,我們分兩種情況進行講解,即初始狀態的分配和某個consumer宕機時的分配情況。

1 初始分配

初始狀態分配的特點是,所有的分區都還未分配到任意一個consumer上。這里我們假設有三個consumer:C0、C1和C2,三個topic:t0、t1和t2,這三個topic分別有1、2和3個分區,那么總共的分區為:t0-0、t1-0、t1-1、t2-0、t2-1和t2-2。關于訂閱情況,這里C0訂閱了t0,C1訂閱了t0和1,C2則訂閱了t0、t1和t2。這里的分區分配規則如下:

1) 首先將所有的分區進行排序,排序方式為:首先按照當前分區所分配的consumer數量從低到高進行排序,如果consumer數量相同,則按照分區的字典序進行排序。這里六個分區由于所在的topic的訂閱情況各不相同,因而其排序結果如下:

Kafka的再平衡機制的三種分區重分配

2) 然后將所有的consumer進行排序,其排序方式為:首先按照當前consumer已經分配的分區數量有小到大排序,如果兩個consumer分配的分區數量相同,則會按照其名稱的字典序進行排序。由于初始時,這三個consumer都沒有分配任何分區,因而其排序結果即為其按照字典序進行排序的結果:

Kafka的再平衡機制的三種分區重分配

3) 然后將各個分區依次遍歷分配給各個consumer,首先需要注意的是,這里的遍歷并不是C0分配完了再分配給C1,而是每次分配分區的時候都整個的對所有的consumer從頭開始遍歷分配,如果當前consumer沒有訂閱當前分區,則會遍歷下一個consumer。然后需要注意的是,在整個分配的過程中,各個consumer所分配的分區數是動態變化的,而這種變化是會體現在各個consumer的排序上的,比如初始時C0是排在第一個的,此時如果分配了一個分區給C0,那么C0就會排到最后,因為其擁有的分區數是最多的。上面的六個分區整體的分配流程如下:

3.1) 首先將t2-0嘗試分配給C0,由于C0沒有訂閱t2,因而分配不成功,繼續輪詢下一個consumer;

3.2) 然后將t2-0嘗試分配給C1,由于C1沒有訂閱t2,因而分配不成功,繼續輪詢下一個consumer;

3.3) 接著將t2-0嘗試分配給C2,由于C2訂閱了t2,因而分配成功,此時由于C2分配的分區數發生變化,各個consumer變更后的排序結果為:

Kafka的再平衡機制的三種分區重分配

3.4) 接下來的t2-1和t2-2,由于也只有C2訂閱了t2,因而其最終還是會分配給C2,最終在t2-0、t2-1和t2-2分配完之后,各個consumer的排序以及其分區分配情況如下:

Kafka的再平衡機制的三種分區重分配

3.5) 接著繼續分配t1-0,首先嘗試將其分配給C0,由于C0沒有訂閱t1,因而分配不成功,繼續輪詢下一個consumer;

3.6) 然后嘗試將t1-0分配給C1,由于C1訂閱了t1,因而分配成功,此時各個consumer以及其分配的分區情況如下:

Kafka的再平衡機制的三種分區重分配

3.7) 同理,接下來會分配t1-1,雖然C1和C2都訂閱了t1,但是由于C1排在C2前面,因而該分區會分配給C1,即:

Kafka的再平衡機制的三種分區重分配

3.9) 最后,嘗試將t0-0分配給C0,由于C0訂閱了t0,因而分配成功,最終的分配結果為:

Kafka的再平衡機制的三種分區重分配

上面的分配過程中,需要始終注意的是,雖然示例中的consumer順序始終沒有變化,但這是由于各個分區分配之后正好每個consumer所分配的分區數量的排序結果與初始狀態一致。這里讀者也可以比較一下這種分配方式與前面講解的Round Robin進行對比,可以很明顯的發現,Sticky重分配策略分配得更加均勻一些。

3.2 模擬consumer宕機

由于前一個示例中最終的分區分配方式模擬宕機的情形比較簡單,因而我們使用另一種訂閱策略。這里我們的示例的consumer有三個:C0、C1和C2,topic有四個:t0、t1、t2和t3,每個topic都有兩個分區,那么總的分區有:t0-0、t0-1、t1-0、t1-1、t2-0、t2-1、t3-0和t3-1。這里的訂閱情況為三個consumer訂閱所有的主題,那么如果按照Sticky的分區分配策略,初始狀態時,分配情況如下,讀者可以按照前一示例講解的方式進行推算:

Kafka的再平衡機制的三種分區重分配

這里我們假設在消費的過程中,C1發生了宕機,此時就會發生再平衡,而根據Sticky策略,其再分配步驟如下:

1) 首先會將宕機之后未分配的分區進行排序,排序方式為:首先按照分區所擁有的consumer數量從低到高進行排序,如果consumer數量相同,則按照分區的字典序進行排序。這里需要注意的是,由于只有C1宕機,因而未分配的分區為:t0-1、t2-0和t3-1,排序之后的結果為:

Kafka的再平衡機制的三種分區重分配

2) 然后將所有的consumer進行排序,排序方式為:首先將consumer按照其所擁有的consumer數量從小到大排序,如果數量相同,則按照consumer名稱的字典序進行排序,排序結果如下:

Kafka的再平衡機制的三種分區重分配

3) 接著依次遍歷各個分區,將其分配給各個consumer,需要注意的是,在分配的過程中,consumer所分配的分區數量是在變化的,而這種變化是會反應在consumer的排序上的:

3.1) 首先嘗試將t0-1分配給C2,由于C2訂閱了t0,因而可以分配成功,此時consumer排序和分區分配情況如下,需要注意的是,雖然分配之后,C2和C0的分區數量相同,但是由于按照字典序,C0在C2前面,因而排序情況還是會發生變化:

Kafka的再平衡機制的三種分區重分配

3.2) 然后嘗試將t2-0分配給C0,由于C0訂閱了t2,因而分配可以成功,此時consumer排序和分區分配情況如下:

Kafka的再平衡機制的三種分區重分配

3.3) 最后嘗試分配t3-1給C2,由于C2訂閱了t3,因而分配可以成功,此時consumer排序與分區分配情況如下:

Kafka的再平衡機制的三種分區重分配

在上面的分區分配過程中,我們可以看到,由于分區的不斷分配,各個consumer所擁有的分區數量也在不斷變化,因而其排序情況也在變化,但是最終可以看到,各個分區是均勻的分配到各個consumer的,并且還保證了當前consumer已經消費的分區是不會分配到其他的consumer上的。

小結

本文首先對kafka的分區重分配策略進行了講解,然后通過四個示例對各個策略重分配的過程進行了講解。需要說明的是,本文所使用的示例正好是Kafka源碼中所提供了三個分配策略類所演示的幾個示例,只不過其并沒有演示其分配的具體細節,而是只講解了最終的結果。同樣的,在網上搜索相關的博文,其也只是將分配的結果直接展示出來,而并沒有演示具體的細節。本文則主要對這些示例的具體實現細節進行了一一講解,以方便讀者朋友能夠更好的理解各個分區重分配策略。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 字符串
    +關注

    關注

    1

    文章

    596

    瀏覽量

    23192
  • kafka
    +關注

    關注

    0

    文章

    55

    瀏覽量

    5588
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    請問CW32芯片的三種工作模式是什么?

    CW32芯片的三種工作模式是什么?
    發表于 12-26 06:48

    Arduino Uno l兩輪自平衡機器人 電機驅動無輸出求解

    Arduino Uno l兩輪自平衡機器人 電機驅動無輸出求解
    發表于 10-15 06:36

    伺服電機的三種制動方式有什么區別?

    伺服電機作為自動化控制系統中執行元件的核心部件,其制動性能直接影響設備的定位精度和安全可靠性。目前主流的伺服電機制動方式包括動態制動、再生制動和電磁機械制動三種,它們在制動原理、應用場景及技術特點上
    的頭像 發表于 09-19 18:26 ?1947次閱讀
    伺服電機的<b class='flag-5'>三種</b>制動方式有什么區別?

    申克 511RBTU 平衡機:新能源汽車電機轉子生產的 “平衡大師”

    在新能源汽車產業飛速發展的今天,驅動電機作為核心部件,其性能與質量直接關乎車輛的安全與效能。而電機轉子的平衡精度,正是決定電機性能的關鍵一環。申克511RBTU新能源汽車電機轉子專用自動平衡機,便是
    的頭像 發表于 08-19 17:56 ?1128次閱讀
    申克 511RBTU <b class='flag-5'>平衡機</b>:新能源汽車電機轉子生產的 “<b class='flag-5'>平衡</b>大師”

    MEMS中的三種測溫方式

    在集成MEMS芯片的環境溫度測量領域,熱阻、熱電堆和PN結原理是三種主流技術。熱阻是利用熱敏電阻,如金屬鉑或注入硅的溫度電阻系數恒定,即電阻隨溫度線性變化的特性測溫,電阻變化直接對應絕對溫度,需恒流源供電。
    的頭像 發表于 07-16 13:58 ?1740次閱讀
    MEMS中的<b class='flag-5'>三種</b>測溫方式

    Kafka生產環境應用方案

    Apache Kafka作為分布式流處理平臺,在現代大數據架構中扮演著消息中間件的核心角色。本文將從運維工程師的角度,詳細介紹Kafka在生產環境中的部署方案、配置優化、監控運維等關鍵技術。通過實戰案例和代碼示例,幫助運維團隊構建穩定、高效的
    的頭像 發表于 07-09 09:56 ?634次閱讀

    開關電源三種控制模式:PWM/PFM/PSM

    摘要 本文詳細介紹了開關電源的三種主要調制方式:PWM(脈沖寬度調制)、PFM(脈沖頻率調制)和PSM(脈沖跨周期調制)。PWM通過調整脈沖寬度保持恒定頻率,適用于重負載,但輕負載效率低。PFM則在
    發表于 06-09 16:11

    介紹三種常見的MySQL高可用方案

    在生產環境中,為了確保數據庫系統的連續可用性、降低故障恢復時間以及實現業務的無縫切換,高可用(High Availability, HA)方案至關重要。本文將詳細介紹三種常見的 MySQL 高可用
    的頭像 發表于 05-28 17:16 ?1315次閱讀

    linux磁盤分區三種場景

    我這里磁盤是標準分區方式,有的是lvm邏輯卷,創建虛擬機的時候選擇的。
    的頭像 發表于 05-24 15:18 ?2093次閱讀
    linux磁盤<b class='flag-5'>分區</b>的<b class='flag-5'>三種</b>場景

    電解液自動再平衡技術突破!全釩液流電池長期儲能效率提升至 84.66%

    和效率下降問題,一直是制約商業化進程的關鍵瓶頸。 ? 近期,揚州大學鄒文江團隊聯合韓國國立全南大學Seunghun Jung教授,在《Applied Energy》發表的最新研究中,開發出一“不對稱自動再平衡技術(AAR)”,為這一難題提供了突破性解決
    發表于 05-24 01:13 ?2211次閱讀

    Kafka工作流程及文件存儲機制

    Kafka 中消息是以 topic 進行分類的,生產者生產消息,消費者消費消息,都是面向 topic 的。
    的頭像 發表于 05-19 10:14 ?989次閱讀
    <b class='flag-5'>Kafka</b>工作流程及文件存儲<b class='flag-5'>機制</b>

    KM科普小課堂 動平衡儀和動平衡機的區別#動平衡儀#動平衡校正

    平衡
    KM預測性維護專家
    發布于 :2025年05月13日 15:10:05

    信號隔離器三種供電方式的區別

    信號隔離器是一重要的信號隔離裝置,其供電方式主要有獨立供電、回路供電和輸出回路供電三種。以下是這三種供電方式的詳細區別: 一、獨立供電 1. 定義:獨立供電是指信號隔離器需要單獨配備DC24V或
    的頭像 發表于 04-17 16:23 ?1619次閱讀
    信號隔離器<b class='flag-5'>三種</b>供電方式的區別

    雙極型極管放大電路的三種基本組態的學習課件免費下載

      本文檔的主要內容詳細介紹的是雙極型極管放大電路的三種基本組態的學習課件免費下載包括了:共集電極放大電路,共基極放大電路,三種基本組態的比較   輸入信號ui 和輸出信號uo 的公共端是集電極。
    發表于 04-11 16:39 ?37次下載

    redis三種集群方案詳解

    在Redis中提供的集群方案總共有三種(一般一個redis節點不超過10G內存)。
    的頭像 發表于 03-31 10:46 ?1586次閱讀
    redis<b class='flag-5'>三種</b>集群方案詳解