為了能夠有效 治理負載失衡 Kafka 引入了優先副本( preferred replica) 的概念
所謂的優先副本是指在 AR 集合列表中的第 1個副本 如上面主題 topic partitions 分區
AR 集合 表(Replicas)為[1,2,0], 那么分區的優先副本即為1 。理想情況下,優先
本就是該分區的 leader 副本,所以也可以稱之為 preferred leader。 kafka 要確保所有主題的優先
本在 Kafka 集群中均勻分布,這樣就保證 了所有分區 leader 均衡分布 如果 leader 分布過於集
中, 就會造成集群負載不均衡
所謂的優先副 選舉是指通過一定的方 促使 本選舉為 leader ,以此來促進
集群 負載 行為 可以稱為“分區平衡”
需要注意 分區平衡並不 Kafka 集群 負載 ,因為還要考 集群中的分區
分配是否 衡。更進 步,每個分區的 le der 副本的負載 是各不相同 的, lea er 副本
載很高,比如需要承載 30000 負荷, 有些 eader 副本只需承載個位
就是說 就算集群中的分區分配均衡、 leader 分配均衡 ,也並不能確保整個集群 負載就是
衡的 ,還需要其 指標來 步的衡 ,
Kafka 中可以提供分區自動平衡的功能,與此對應的 broker 端參數是 auto.leader
rebalance.enabl ,此參數的默認值為 true ,即默認情況下此功能是開啟的。如果開啟分區
自動平衡的功能,則 Kafka 的控制器會啟動 個定時任務,這個定時任務會輪詢所有的 broker
節點,計算每個 broker 節點的分區不平衡率( broker 中的不平衡率=非優先副本的 leader 數/
分區總數)是否超過 leader .工 mbalance.per.broker.percentage 參數配置的比值,
默認值為 10% ,如果超過設定的比值則會自動執行優先副本的選舉動作以求分區平衡。執行
周期由參數 leader .工mbalance.che ck .inter val seconds 控制,默認值為 00 秒,即
分鍾
不過在生產環境中不建議將 aut leader rebalance enable 設置為默認的 true
為這可能引起負面的性能問題,也有可能引起客戶端一定時間的阻塞。因為執行的時間無法自
主掌控,如果在關鍵時期(比如電商大促波峰期)執行關鍵任務的關卡上執行優先副本的自動
選舉操作,勢必會有業務阻塞、頻繁超時之類的風險 前面也分析過,分區及副本的均衡也不
能完全確保集群整體的均衡,並且集群中 一定程度上的不均衡也是可以忍受的,為防止出現關
鍵時期“掉鏈子”的行為,筆者建議還是將掌控權把控在自己的手中,可以針對此類相關的埋
點指標設置相應的告警,在合適的時機執行合適的操作,而這個“合適的操作”就是指手動執
行分區平衡。
Kafka kafka-perferred-replica election.sh 腳本提供了對分區 leader 副本進行重新平衡的功
能。優先副本的選舉過程是 個安全的過程, Kafka 客戶端可以自動感知分區 leader ji\lj 本的變
更。下面的示例演示了 kafka-perferr創刊plica lec tion.s 腳本的具體用法: