讀書筆記——Kafka核心技術與實戰(生產者分區機制原理)

爲什麼分區?

mcUfxg.png

  • 分區作用是提供負載均衡的能力,對數據分區是爲了實現系統的高伸縮性 (High Scalability).
  • 不同的分區可放置在不同節點的機器上(同一個分區的副本可以分佈在不同的機器上),數據的訪問操作都是針對分區這個粒度進行的,這樣每個節點的機器都獨立執行各自分區的讀寫請求;
  • 增加新的節點機器來增加整理的吞吐量;

分區策略是什麼?有哪些?

  • 分區策略是指決定生產者將消息發送到哪個分區的算法

  • 輪詢算法:Round-robin

    • 一個主題下有三個分區Pa,Pb,Pc,消息1、4、7被分配到Pa…
    • 優秀的負載均衡表現,保證消息最大限度地分配到所有分區上,默認情況下是最合理的分區策略。
  • 隨機策略:Randomness

  • List partitions = cluster.partitionsForTopic(topic);
    return ThreadLocalRandom.current().nextInt(partitions.size());

  • 按消息鍵保存策略:Key-Ordering

  • List partitions = cluster.partitionsForTopic(topic);
    return Math.abs(key.hashCode()) % partitions.size();

  • 其他分區策略:基於地理位置的分區策略,針對大規模的 Kafka 集羣。根據 broker 所在的 IP 分區

  • List partitions = cluster.partitionsForTopic(topic);
    return partitions.stream().filter(p -> isSouth(p.leader().host())).map(PartitionInfo::partition).findAny().get();

總結:

  • Kafka 的消息組織方式實際上是三級架構:主題-分區-消息,主題下的消息會保存在某個分區下,不會在多個分區下保存多份。
  • 分區機制是實現負載均衡和高吞吐的關鍵
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章