? ? ?重平衡的完整流程需要消費者 端和協調者組件共同參與才能完成。我們先從消費者的視角來審視一下重平衡的流程。在消費者端,重平衡分為兩個步驟:分別是加入組和等待領導者消費者(Leader Consumer)分配方案。這兩個步驟分別對應兩類特定的請求:JoinGroup 請求和 SyncGroup 請求。
? ? 當組內成員加入組時,它會向協調者發送 JoinGroup 請求。在該請求中,每個成員都要將 自己訂閱的主題上報,這樣協調者就能收集到所有成員的訂閱信息。一旦收集了全部成員的 JoinGroup 請求后,協調者會從這些成員中選擇一個擔任這個消費者組的領導者。
? ? 通常情況下,第一個發送 JoinGroup 請求的成員自動成為領導者。你一定要注意區分這里 的領導者和之前我們介紹的領導者副本,它們不是一個概念。這里的領導者是具體的消費者 實例,它既不是副本,也不是協調者。領導者消費者的任務是收集所有成員的訂閱信息,然 后根據這些信息,制定具體的分區消費分配方案。
? ? 選出領導者之后,協調者會把消費者組訂閱信息封裝進 JoinGroup 請求的響應體中,然后 發給領導者,由領導者統一做出分配方案后,進入到下一步:發送 SyncGroup 請求。
? ? 在這一步中,領導者向協調者發送 SyncGroup 請求,將剛剛做出的分配方案發給協調者。 值得注意的是,其他成員也會向協調者發送 SyncGroup 請求,只不過請求體中并沒有實際 的內容。這一步的主要目的是讓協調者接收分配方案,然后統一以 SyncGroup 響應的方式 分發給所有成員,這樣組內所有成員就都知道自己該消費哪些分區了。
接下來,我用一張圖來形象地說明一下 JoinGroup 請求的處理過程。
? ?就像前面說的,JoinGroup 請求的主要作用是將組成員訂閱信息發送給領導者消費者,待 領導者制定好分配方案后,重平衡流程進入到 SyncGroup 請求階段。
下面這張圖描述的是 SyncGroup 請求的處理流程。
推薦閱讀
業務冪等性技術架構體系
責任鏈模式實踐-開放銀行數據保護及合規
Kafka 中冪等生產者和事務生產者是一回事嗎-CSDN博客