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