Kafka技術知識總結之六——Kafka負載均衡策略

接上篇《Kafka技術知識總結之五——Kafka的高可用性》

六. Kafka負載均衡策略

6.1 分區器

分區器是生產者層面的負載均衡。Kafka 生產者生產消息時,根據分區器將消息投遞到指定的分區中,所以 Kafka 的負載均衡很大程度上依賴於分區器。
Kafka 默認的分區器是 Kafka 提供的 DefaultPartitioner。它的分區策略是根據 Key 值進行分區分配的:

  • 如果 key 不爲 null:對 Key 值進行 Hash 計算,從所有分區中根據 Key 的 Hash 值計算出一個分區號;擁有相同 Key 值的消息被寫入同一個分區;
  • 如果 key 爲 null:消息將以輪詢的方式,在所有可用分區中分別寫入消息。

如果不想使用 Kafka 默認的分區器,用戶可以實現 Partitioner 接口,自行實現分區方法。

注:

  1. 在筆者的理解中,分區器的負載均衡與順序性有着一定程度上的矛盾。
  • 負載均衡的目的是將消息儘可能平均分配,對於 Kafka 而言,就是儘可能將消息平均分配給所有分區;
  • 如果使用 Kafka 保證順序性,則需要利用到 Kafka 的分區順序性的特性。
  • 對於需要保證順序性的場景,通常會利用 Key 值實現分區順序性,那麼所有 Key 值相同的消息就會進入同一個分區。這樣的情況下,對於大量擁有相同 Key 值的消息,會湧入同一個分區,導致一個分區消息過多,其他分區沒有消息的情況,即與負載均衡的思想相悖。
  1. 並非分區數量越多,效率越高
  • Topic 每個 partition 在 Kafka 路徑下都有一個自己的目錄,該目錄下有兩個主要的文件:base_offset.logbase_offset.index。Kafka 服務端的 ReplicaManager 會爲每個 Broker 節點保存每個分區的這兩個文件的文件句柄。所以如果分區過多,ReplicaManager 需要保持打開狀態的文件句柄數也就會很多。
  • 每個 Producer, Consumer 進程都會爲分區緩存消息,如果分區過多,緩存的消息越多,佔用的內存就越大;
  • n 個分區有 1 個 Leader,(n-1) 個 Follower,如果運行過程中 Leader 掛了,則會從剩餘 (n-1) 個 Followers 中選舉新 Leader;如果有成千上萬個分區,那麼需要很長時間的選舉,消耗較大的性能。

6.2 再均衡

再均衡是消費者層面的負載均衡,具體見前面的第四章講解內容

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章