教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

消費(fèi)者分區(qū)分配策略:Stricky、Range、RoundRobin

更新時(shí)間:2021年10月29日15時(shí)18分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

Range范圍分配策略是Kafka默認(rèn)的分配策略,它可以確保每個(gè)消費(fèi)者消費(fèi)的分區(qū)數(shù)量是均衡的。注意:Rangle范圍分配策略是針對(duì)每個(gè)Topic的。
配置
配置消費(fèi)者的partition.assignment.strategy為org.apache.kafka.clients.consumer.RangeAssignor。
算法公式
n = 分區(qū)數(shù)量 / 消費(fèi)者數(shù)量
m = 分區(qū)數(shù)量 % 消費(fèi)者數(shù)量
前m個(gè)消費(fèi)者消費(fèi)n+1個(gè)
剩余消費(fèi)者消費(fèi)n個(gè)

RoundRobin輪詢策略
RoundRobinAssignor輪詢策略是將消費(fèi)組內(nèi)所有消費(fèi)者以及消費(fèi)者所訂閱的所有topic的partition按照字典序排序(topic和分區(qū)的hashcode進(jìn)行排序),然后通過(guò)輪詢方式逐個(gè)將分區(qū)以此分配給每個(gè)消費(fèi)者。
配置
配置消費(fèi)者的partition.assignment.strategy為org.apache.kafka.clients.consumer.RoundRobinAssignor。
Stricky粘性分配策略   
從Kafka 0.11.x開(kāi)始,引入此類(lèi)分配策略。主要目的:
1. 分區(qū)分配盡可能均勻
2. 在發(fā)生rebalance的時(shí)候,分區(qū)的分配盡可能與上一次分配保持相同
沒(méi)有發(fā)生rebalance時(shí),Striky粘性分配策略和RoundRobin分配策略類(lèi)似。


上面如果consumer2崩潰了,此時(shí)需要進(jìn)行rebalance。如果是Range分配和輪詢分配都會(huì)重新進(jìn)行分配,例如:
通過(guò)上圖,我們發(fā)現(xiàn),consumer0和consumer1原來(lái)消費(fèi)的分區(qū)大多發(fā)生了改變。接下來(lái)我們?cè)賮?lái)看下粘性分配策略。

我們發(fā)現(xiàn),Striky粘性分配策略,保留rebalance之前的分配結(jié)果。這樣,只是將原先consumer2負(fù)責(zé)的兩個(gè)分區(qū)再均勻分配給consumer0、consumer1。這樣可以明顯減少系統(tǒng)資源的浪費(fèi),例如:之前consumer0、consumer1之前正在消費(fèi)某幾個(gè)分區(qū),但由于rebalance發(fā)生,導(dǎo)致consumer0、consumer1需要重新消費(fèi)之前正在處理的分區(qū),導(dǎo)致不必要的系統(tǒng)開(kāi)銷(xiāo)。(例如:某個(gè)事務(wù)正在進(jìn)行就必須要取消了)




猜你喜歡:

Kafka生產(chǎn)、消費(fèi)數(shù)據(jù)的工作流程

Scala的聲明值和變量【大數(shù)據(jù)文章】

Windows系統(tǒng)中怎樣下載安裝Scala插件?

Kafka基準(zhǔn)測(cè)試怎樣進(jìn)行?

傳智python+大數(shù)據(jù)開(kāi)發(fā)培養(yǎng)新型數(shù)字化人才

0 分享到:
和我們?cè)诰€交談!