Apache Kafka(十)Partitions與Replication Factor 調整准則


PartitionsReplication Factor調整准則

Partition 數目與Replication Factor是在創建一個topic時非常重要的兩個參數,這兩個參數的取值會直接影響到系統的性能與穩定性。

盡量在第一次創建一個topic時就指定這兩個參數,因為

  • 如果Partition 數目在之后再次做調整,則會打亂key的順序保證(同樣的key會分布到不同的partition上)
  • 如果Replication Factor在之后再次增加,則會給集群帶來更大的壓力,可能會導致性能下降

 

1. Partition 數目

一般來說,每個partition 能處理的吞吐為幾MB/s(仍需要基於根據本地環境測試后獲取准確指標),增加更多的partitions意味着:

  • 更高的並行度與吞吐
  • 可以擴展更多的(同一個consumer group中的)consumers
  • 若是集群中有較多的brokers,則可更大程度上利用閑置的brokers
  • 但是會造成Zookeeper的更多選舉
  • 也會在Kafka中打開更多的文件

 

調整准則:

  • 一般來說,若是集群較小(小於6個brokers),則配置2 x broker數的partition數。在這里主要考慮的是之后的擴展。若是集群擴展了一倍(例如12個),則不用擔心會有partition不足的現象發生
  • 一般來說,若是集群較大(大於12個),則配置1 x broker 數的partition數。因為這里不需要再考慮集群的擴展情況,與broker數相同的partition數已經足夠應付常規場景。若有必要,則再手動調整
  • 考慮最高峰吞吐需要的並行consumer數,調整partition的數目。若是應用場景需要有20個(同一個consumer group中的)consumer並行消費,則據此設置為20個partition
  • 考慮producer所需的吞吐,調整partition數目(如果producer的吞吐非常高,或是在接下來兩年內都比較高,則增加partition的數目)

以上僅是幾個基本准則,最重要的是:在本地集群做測試,以獲取一個更合適的partition數目,不同的集群會有不同的性能。

 

2. Replication factor

此參數決定的是records復制的數目,建議至少 設置為2,一般是3,最高設置為4。更高的replication factor(假設數目為N)意味着:

  • 系統更穩定(允許N-1個broker宕機)
  • 更多的副本(如果acks=all,則會造成較高的延時)
  • 系統磁盤的使用率會更高(一般若是RF為3,則相對於RF為2時,會占據更多50% 的磁盤空間)

 

調整准則:

  • 以3為起始(當然至少需要有3個brokers,同時也不建議一個Kafka 集群中節點數少於3個節點)
  • 如果replication 性能成為了瓶頸或是一個issue,則建議使用一個性能更好的broker,而不是降低RF的數目
  • 永遠不要在生產環境中設置RF為1

 

3. 集群調整建議

一個已被業界接受的准則是:

  • 一個broker不應該承載超過2000 到 4000 個partitions(考慮此broker上所有來自不同topics的partitions)。同時,一個Kafka集群上brokers中所有的partitions總數最多不應超過20,000個。

此准則基於的原理是:在有broker宕機后,zookeeper需要重新做選舉。若是partitions數目過多,則需要執行大量的leader elections。

另外幾個常規原則有:

  • 如果集群中需要更多的partitions,則優先考慮增加brokers
  • 如果集群中需要20,000 個以上的partitions,則可以參考Netflix的模型,創建更多的Kafka 集群

最后需要注意的是:不要為一個topic創建超過1000個的partitions。我們也並不需要1000個partitions才能達到很高的吞吐。在開始的時候,選擇一個更合理的partition數目,然后測試性能,根據測試結果再調整partitions 數目。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM