1. 程式人生 > 其它 >StrickyAssignor 分配策略

StrickyAssignor 分配策略

kafka在0.11.x版本支援了StrickyAssignor, 翻譯過來叫粘滯策略,它主要有兩個目的

分割槽的分配儘可能的均勻

分割槽的分配儘可能和上次分配保持相同

當兩者發生衝突時, 第 一 個目標優先於第二個目標。 鑑於這兩個目標, StickyAssignor分配策略的具體實現要比RangeAssignor和RoundRobinAssi gn or這兩種分配策略要複雜得多,假設我們有這樣一個場景

假設消費組有3個消費者:C0,C1,C2,它們分別訂閱了4個Topic(t0,t1,t2,t3),並且每個主題有兩個分
區(p0,p1),也就是說,整個消費組訂閱了8個分割槽:tOpO 、 tOpl 、 tlpO 、 tlpl 、 t2p0 、
t2pl 、t3p0 、 t3pl
那麼最終的分配場景結果為
CO: tOpO、tlpl 、 t3p0
Cl: tOpl、t2p0 、 t3pl
C2: tlpO、t2pl
這種分配方式有點類似於輪詢策略,但實際上並不是,因為假設這個時候,C1這個消費者掛了,就勢必會造成
重新分割槽(reblance),如果是輪詢,那麼結果應該是
CO: tOpO、tlpO、t2p0、t3p0
C2: tOpl、tlpl、t2pl、t3pl
然後,strickyAssignor它是一種粘滯策略,所以它會滿足`分割槽的分配儘可能和上次分配保持相同`,所以
分配結果應該是
消費者CO: tOpO、tlpl 、 t3p0、t2p0
消費者C2: tlpO、t2pl、tOpl、t3pl
也就是說,C0和C2保留了上一次是的分配結果,並且把原來C1的分割槽分配給了C0和C2。 這種策略的好處是
使得分割槽發生變化時,由於分割槽的“粘性,減少了不必要的分割槽移動