JoinGroup的过程
在rebalance之前,需要保證coordinator是已經(jīng)確定好了的,整個(gè)rebalance的過(guò)程分為兩個(gè)步驟,Join和Sync
join: 表示加入到consumer group中,在這一步中,所有的成員都會(huì)向coordinator發(fā)送joinGroup的請(qǐng)求。一旦所有成員都發(fā)送了joinGroup請(qǐng)求,那么coordinator會(huì)選擇一個(gè)consumer擔(dān)任leader角色,并把組成員信息和訂閱信息發(fā)送消費(fèi)者
leader選舉算法比較簡(jiǎn)單,如果消費(fèi)組內(nèi)沒(méi)有l(wèi)eader,那么第一個(gè)加入消費(fèi)組的消費(fèi)者就是消費(fèi)者leader,如果這個(gè)時(shí)候leader消費(fèi)者退出了消費(fèi)組,那么重新選舉一個(gè)leader,這個(gè)選舉很隨意,類似于隨機(jī)算法
protocol_metadata: 序列化后的消費(fèi)者的訂閱信息
leader_id: 消費(fèi)組中的消費(fèi)者,coordinator會(huì)選擇一個(gè)座位leader,對(duì)應(yīng)的就是member_id
member_metadata 對(duì)應(yīng)消費(fèi)者的訂閱信息
members:consumer group中全部的消費(fèi)者的訂閱信息
generation_id: 年代信息,類似于之前講解zookeeper的時(shí)候的epoch是一樣的,對(duì)于每一輪rebalance,generation_id都會(huì)遞增。主要用來(lái)保護(hù)consumer group。隔離無(wú)效的offset提交。也就是上一輪的consumer成員無(wú)法提交offset到新的consumer group中。
每個(gè)消費(fèi)者都可以設(shè)置自己的分區(qū)分配策略,對(duì)于消費(fèi)組而言,會(huì)從各個(gè)消費(fèi)者上報(bào)過(guò)來(lái)的分區(qū)分配策略中選舉一個(gè)彼此都贊同的策略來(lái)實(shí)現(xiàn)整體的分區(qū)分配,這個(gè)"贊同"的規(guī)則是,消費(fèi)組內(nèi)的各個(gè)消費(fèi)者會(huì)通過(guò)投票來(lái)決定
在joingroup階段,每個(gè)consumer都會(huì)把自己支持的分區(qū)分配策略發(fā)送到coordinator
coordinator手機(jī)到所有消費(fèi)者的分配策略,組成一個(gè)候選集
每個(gè)消費(fèi)者需要從候選集里找出一個(gè)自己支持的策略,并且為這個(gè)策略投票
最終計(jì)算候選集中各個(gè)策略的選票數(shù),票數(shù)最多的就是當(dāng)前消費(fèi)組的分配策略
?
總結(jié)
以上是生活随笔為你收集整理的JoinGroup的过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何确定coordinator
- 下一篇: 创建一个带副本机制的topic