目錄

分區(qū)的分配及再平衡
1 分區(qū)分配策略之Range
2?分區(qū)分配策略之RoundRobin
3 分區(qū)分配策略之Sticky
一個(gè)consumer group中有多個(gè)consumer組成,一個(gè)topic有多個(gè)partition組成,現(xiàn)在的問題是,到底由哪個(gè)onsumer來消費(fèi)哪個(gè)partition的數(shù)據(jù)?
Kafka有四種主流的分區(qū)分配策略: Range、RoundRobin、Sticky、CooperativeSticky。
可以通過配置參數(shù)partition.assignment.strategy,修改分區(qū)的分配策略。默認(rèn)策略是Range + CooperativeSticky。Kaka可以同時(shí)使用多個(gè)分區(qū)分配策略。
發(fā)生分配的過程在消費(fèi)者組初始化過程中的第4步leader消費(fèi)者制定消費(fèi)方案和第7步中再平衡的過程中,具體初始化流程在此文章中有記錄kafka-consumer-基本介紹(理論)_SeaDhdhdhdhdh的博客-博客
1 分區(qū)分配策略之RangeRange是對(duì)單個(gè)topic而言的。
首先對(duì)同一個(gè)topic里面的分區(qū)按照序號(hào)進(jìn)行排序,并對(duì)消費(fèi)者按照字母順序進(jìn)行排序。
假如現(xiàn)在有7個(gè)分區(qū),3個(gè)消費(fèi)者,排序后的分區(qū)將會(huì)是0,1,2,3,4,5,6;消費(fèi)者排序完之后將會(huì)是C0,C1,C2。
通過 partitions數(shù)/consumer 數(shù)來決定每個(gè)消費(fèi)者應(yīng)該消費(fèi)幾個(gè)分區(qū)。如果除不盡,那么前面幾個(gè)消費(fèi)者將會(huì)多消費(fèi)1個(gè)分區(qū)。
例如,7/3=2余1,除不盡,那么消費(fèi)者C0便會(huì)多消費(fèi)1個(gè)分區(qū)。8/3=2余2,除不盡,那么C0和C1分別多消費(fèi)一個(gè)。

注意:如果只是針對(duì)1個(gè)topic而言,C0消費(fèi)者多消費(fèi)1個(gè)分區(qū)影響不是很天。但是如果有N多個(gè)topic,那么針對(duì)每個(gè)topic,消費(fèi)者C0都將多消費(fèi)1個(gè)分區(qū),topic越多,C0消費(fèi)的分區(qū)會(huì)比其他消費(fèi)者明顯多消費(fèi)N個(gè)分區(qū)。除此之外, 如果再C0消費(fèi)者掛掉之后生產(chǎn)者發(fā)送消息(掛掉以后45秒以內(nèi)),那么本來有C0消費(fèi)的0,1,2分區(qū)會(huì)重新分配給下一個(gè)序號(hào)的消費(fèi)者(C1)消費(fèi)。此時(shí)生產(chǎn)者再次發(fā)送消息(掛掉45秒以后)會(huì)觸發(fā)再平衡,將剩余兩個(gè)消費(fèi)者根據(jù)range策略再次進(jìn)行分配。
容易產(chǎn)生數(shù)據(jù)傾斜!
RoundRobin針對(duì)集群中所有Topic而言。
RoundRobin 輪詢分區(qū)策略,是把所有的partition和所有的consumer都列出來,然后按照hashcode進(jìn)行排序,最后通過輪詢算法來分配partition給到各個(gè)消費(fèi)者。

修改分區(qū)策略代碼:
//設(shè)置分區(qū)分配策略
properties.put(ConsumerConfig.PARTITION_ASSIGIIEINTLSTRATEGY_CONFI, "org.apache.kafka.clients.consumer.RoundRotinassignor");注意測(cè)試時(shí)所有的消費(fèi)者都要配置分配策略。
如果再C0消費(fèi)者掛掉之后生產(chǎn)者發(fā)送消息(掛掉以后45秒以內(nèi)),那么本來有C0消費(fèi)的0,1,2分區(qū)會(huì)重新分配給其他消費(fèi)者(C1,C2)消費(fèi)。此時(shí)生產(chǎn)者再次發(fā)送消息(掛掉45秒以后)會(huì)觸發(fā)再平衡,將剩余兩個(gè)消費(fèi)者根據(jù)RoundRobin策略再次進(jìn)行分配。
3 分區(qū)分配策略之Sticky粘性分區(qū)定義:可以理解為分配的結(jié)果帶有“粘性的”。即在執(zhí)行一次新的分配之前,考慮上一次分配的結(jié)果,盡量少的調(diào)整分配的變動(dòng),可以節(jié)省大量的開銷。
粘性分區(qū)是Kafka 從 0.11.x版本開始引入這種分配策略,首先會(huì)盡量均衡的放置分區(qū)到消費(fèi)者上面,在出現(xiàn)同一消費(fèi)者組內(nèi)消費(fèi)者出現(xiàn)問題的時(shí)候,會(huì)盡量保持原有分配的分區(qū)不變化。
//設(shè)置分區(qū)分配策略
properties.put(ConsumerConfig.PARTITION_ASSIGIIEINTLSTRATEGY_CONFI, "org.apache.kafka.clients.consumer.StickyAssignor");如果再C0消費(fèi)者掛掉之后生產(chǎn)者發(fā)送消息(掛掉以后45秒以內(nèi)),那么本來有C0消費(fèi)的0,1,2分區(qū)會(huì)重新分配給其他消費(fèi)者(C1,C2)消費(fèi)。此時(shí)生產(chǎn)者再次發(fā)送消息(掛掉45秒以后)會(huì)觸發(fā)再平衡,將剩余兩個(gè)消費(fèi)者根據(jù)sticky策略再次進(jìn)行分配。
注意:sticky和RoundRobin的不同點(diǎn)在于:RoundRobin是輪詢分配,分配到不同消費(fèi)者的分區(qū)會(huì)有一定的規(guī)律,sticky更重于均勻分配,分配到不同消費(fèi)者的分區(qū)不一定會(huì)有規(guī)律。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)頁(yè)名稱:kafka-consumer-分配策略-創(chuàng)新互聯(lián)
分享鏈接:http://chinadenli.net/article48/edpep.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、電子商務(wù)、響應(yīng)式網(wǎng)站、外貿(mào)建站、服務(wù)器托管、微信公眾號(hào)
聲明:本網(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)
猜你還喜歡下面的內(nèi)容