动态分区分配的“首次适应算法_kafka集群关于资源分配的手册
一、本文要講
如何結(jié)合業(yè)務(wù)敲定kafka的機器分配數(shù)目!
消費者分區(qū)分配策略
副本分配到broker上的算法:
二、正文
1:如何結(jié)合業(yè)務(wù)敲定kafka的機器分配數(shù)目!
原則一:需要遵循的前提是,單數(shù)原則,就是zookeeper和broker的節(jié)點數(shù)目最好是單數(shù),用于多數(shù)服從選舉!
原則二:公約數(shù)原則!
什么叫公約數(shù)原則?
假設(shè)topic的分片副本指定為:10shard*3rep。怎么來確定機器的數(shù)目?設(shè)當機器數(shù)目為m每臺機器的磁盤占據(jù) = 30/m ,如果除不盡的話,多分配的節(jié)點會多1/10數(shù)據(jù)量每臺機器的流量占據(jù) = 10/m ,如果除不盡的話,多分配的節(jié)點會多1/10流量所以最好的機器數(shù)目最好是是能被分片數(shù)和整體節(jié)點數(shù)整除的,這樣就不會有多分配的節(jié)點出現(xiàn)綜上所述,那么就是10和30的公約數(shù)或公倍數(shù)!理想情況下,機器的數(shù)目m= n * 30
節(jié)省機器情況,機器的數(shù)目m= 1/n *30 && 1/n *10 ? ?
注意,不整除的話單topic的分布會出現(xiàn)不均衡的情況2:?消費者分區(qū)分配策略
分區(qū)分配給消費者有三個策略,默認是第一個。
RangeAssignor策略:
????假設(shè)n=分區(qū)數(shù)/消費者數(shù)量,m=分區(qū)數(shù)%消費者數(shù)量,那么前m個消費者每個分配n+1個分區(qū),后面的(消費者數(shù)量-m)個消費者每個分配n個分區(qū)。
備注,針對于單個topic分區(qū)的分配,如果一個consumer同時訂閱了多個topic,那么對于多個topic而言,某個consumer可能分配到的總分區(qū)數(shù)目會不平衡(超過1),所以可以使用RoundRobinAssignor策略。?RoundRobinAssignor策略
????將消費組內(nèi)訂閱的所有Topic的分區(qū)及所有消費者進行排序后盡量均衡的分配(RangeAssignor是針對單個Topic的分區(qū)進行排序分配的)@hxx 就是將所有topic的分區(qū)放在一起來range,但是當有consumer下線也是會出現(xiàn)負載不均衡的!
StickyAssignor策略
????第一次分配的時候遵循roundrobin策略,當有consumer變動時,以最小改動作為分配基準,僅僅對下線的consumer分配的分區(qū)重新排序進行roundrobin分配。
備注,roundrobin策略當有consumer變動的時候,再把所有的分區(qū)排序然后重新分配,這個過程會導致某個分區(qū)以前已經(jīng)分配給某個還在線的consumer,現(xiàn)在會重新分給另一個consumer,但是stick不會!看圖
3:副本分配到broker上的算法
????假設(shè)topic的分片副本指定為:10shard*3rep。
????從partition=0開始分配,將partition=0分配到隨機的broker id上作為此partition的leader,比如是id=4,
????然后分配partition=1,分配到id=5,遞增循環(huán),將所有的partition都分配一遍,leader分配結(jié)束。然后是副本,如果有2副本,則將partition=0分配到id=5,id=6的節(jié)點上,將partition=1分配到id=6,id=7的節(jié)點上。
總結(jié)
????了解了kafka的分配策略,在日后的集群擴容或者負載均衡方面會有更多的知識儲備。
總結(jié)
以上是生活随笔為你收集整理的动态分区分配的“首次适应算法_kafka集群关于资源分配的手册的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谷歌内部信证实公司将严格控管开销 大量福
- 下一篇: 华硕证实Windows游戏掌机并非开玩笑