Kafka Note(六)負(fù)載均衡機(jī)制

(六)kafka負(fù)載均衡機(jī)制

A. 服務(wù)端broker負(fù)載均衡機(jī)制

  • 概述:生產(chǎn)者、消費(fèi)者真實(shí)對(duì)應(yīng)的實(shí)體是partition的leader副本,因此broker的負(fù)載均衡取決于leader副本分布是否均勻。

1. leader副本的均衡分布實(shí)現(xiàn)

  • 初始分布

    • 若共有5臺(tái)brokers,創(chuàng)建一個(gè)分區(qū)數(shù)partition為5且副本數(shù)replicas數(shù)為3的topicA。
    • 具體的partition下0 - 4的leader副本分布順序?qū)?yīng)broker0 - 4,并將follower副本依次放在后兩位broker。比如:partition0的follower副本放在broker1 & 2上。
  • 分布結(jié)果AR:AR = ISR +OSR

    分區(qū)名 副本所在的broker列表 備注
    topicA-partition0 0,1,2 leader副本在broker0
    topicA-partition1 1,2,3 leader副本在broker1
    topicA-partition2 2,3,4 leader副本在broker2
    topicA-partition3 3,4,0 leader副本在broker3
    topicA-partition4 4,0,1 leader副本在broker4
  • 優(yōu)先副本:broker列表中,第一個(gè)即為優(yōu)先副本,優(yōu)先選擇其為leader副本。

2. 分區(qū)自動(dòng)重平衡

  • 場(chǎng)景概述:隨著時(shí)間推移、集群狀態(tài)變化,leader副本或多或少會(huì)有遷移或切換,導(dǎo)致部分broker上的leader副本偏多。
  • auto.leader.rebalance.enable:該參數(shù)默認(rèn)開啟,使集群中的controller啟動(dòng)定時(shí)任務(wù),默認(rèn)每隔5min輪詢所有brokers,計(jì)算每一個(gè)節(jié)點(diǎn)的分區(qū)不平衡率,默認(rèn)閾值為10%,高于該值會(huì)觸發(fā)分區(qū)遷移。
  • 分區(qū)不平衡率
    • 計(jì)算公式:分區(qū)不平衡率 = 當(dāng)前broker的非優(yōu)先副本leader個(gè)數(shù) / 當(dāng)前broker分區(qū)總數(shù)
    • 案例場(chǎng)景:broker0上原本僅有topicA-partition0,3 & 4三個(gè)副本,其中0是優(yōu)先副本也是leader副本。后來(lái)broker4宕機(jī)了,所以topicA-partition4此時(shí)將leader副本從broker4轉(zhuǎn)移到broker0上,此時(shí)broker0依然擁有3個(gè)副本,但是topicA-partition4變成leader副本(非優(yōu)先副本),此時(shí)分區(qū)不平衡率為1/3,若broker4后續(xù)恢復(fù)后,觸發(fā)分區(qū)自動(dòng)遷移機(jī)制。
  • 自動(dòng)遷移可能會(huì)影響性能,可手動(dòng)腳本kafka-preferred-replica-election.sh執(zhí)行該操作。

3. broker負(fù)載不均衡常見(jiàn)場(chǎng)景

  • 集群狀態(tài)變化導(dǎo)致leader切換,但默認(rèn)開啟分區(qū)自動(dòng)重平衡,無(wú)須過(guò)分擔(dān)心。
  • kafka當(dāng)前負(fù)載最大痛點(diǎn)即新增broker后,若沒(méi)有新建topic或者是將老的topic遷移分區(qū),則該broker不會(huì)有任何流量。需手動(dòng)完成分區(qū)重新分配 & 數(shù)據(jù)遷移。
  • kafka設(shè)置了broker.rack,分區(qū)算法從本來(lái)順延方法調(diào)整為盡量避免副本在同一個(gè)機(jī)架上,可能導(dǎo)致分配不均。

B. 生產(chǎn)者producer負(fù)載均衡機(jī)制

  • 概述:生產(chǎn)端的負(fù)載均衡就是保障生產(chǎn)消息發(fā)往哪個(gè)partition(leader副本)。
  • 手段
    • 無(wú)key:基于輪訓(xùn)算法,計(jì)算發(fā)往的具體partition。
    • 有key:hash計(jì)算目標(biāo)partition,不論partition是否活躍。
  • Producer負(fù)載不均衡常見(jiàn)場(chǎng)景
    • 生產(chǎn)者指定了key,創(chuàng)建topic時(shí)分區(qū)器選擇指定key的模式,會(huì)將消息定向發(fā)給具體的broker上導(dǎo)致leader不平均。
    • 業(yè)務(wù)使用上,個(gè)別topic的流量遠(yuǎn)大于其他topic。

C. 消費(fèi)者consumer負(fù)載均衡機(jī)制

  • 概述:若topic共有100w數(shù)據(jù),消費(fèi)組共有4個(gè)消費(fèi)者,消費(fèi)者端的負(fù)載均衡就是想辦法保障讓每個(gè)消費(fèi)者拉取25w條數(shù)據(jù)。
  • 手段:消費(fèi)端的實(shí)體是partition(leader副本),需要把partition均勻分配給消費(fèi)組內(nèi)的consumer。
    • partition.assignment.strategy重平衡時(shí)在所有consumer都發(fā)送完join_group后broker響應(yīng)后,消費(fèi)組中l(wèi)eader發(fā)出sync_group時(shí)采用的分區(qū)分配策略參數(shù)。
    • 策略類型
      • 默認(rèn)類型為rangeAssignor
      • 輪詢分配roundRobinAssignor
      • 當(dāng)前最優(yōu)解stickyAssignor
  • Consumer負(fù)載不均衡常見(jiàn)場(chǎng)景
    • 分區(qū)分配策略不佳,導(dǎo)致負(fù)載不均。
    • 業(yè)務(wù)使用問(wèn)題,個(gè)別topic流量遠(yuǎn)大于其他topic。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容