2016-03-17 40 views
3

默認情況下,kafka使用一個目錄來保存日誌。爲提高性能,建議將更多磁盤安裝到代理,並將每個磁盤分配到一個目錄,然後在server.properties中輸入log.dirs=作爲彗星分隔的目錄列表。該文件說,分區將分佈在目錄循環式風格中。據我現在瞭解,這是新的話題。如何將現有的kafka主題分區分散到更多目錄中?

我想將我已創建的主題的一半分區分配到新創建的log.dir,同時保留另一半的分區 - 是否有支持的方式來執行此操作?

回答

2

https://community.hortonworks.com/articles/59715/migrating-kafka-partitions-data-to-new-data-folder.html

方法1:只要刪除現有的數據目錄內容和配置新的數據目錄位置

在這種方法中,卡夫卡複製從集羣中的其他成員的分區數據。完整的分區數據將從頭開始複製。所有分區均勻地分配到目錄位置。複製時間將取決於數據大小。如果我們有大量數據,副本可能需要更多時間才能加入ISR。這也會給網絡/集羣帶來很多負擔。這可能會給Kafka集羣帶來一些問題。我們可能會看到,一些ISR更改和客戶端錯誤。對於小羣集(GB數據),此方法應該沒問題

注意:在Kafka中,broker-id將存儲在log.dir/meta.properties文件中。如果我們沒有配置broker.id,那麼默認Kafka會生成一個新的broker-id。爲避免這種情況,請在log.dirs目錄中保留現有的meta.properties文件。

方法2:將分區目錄,以新的數據目錄(如果沒有應對檢查點文件)

它類似於上面的方法,但在這裏只卡夫卡複製移動的分區。

方法3:移動分區目錄和分割檢查點文件。

每個數據目錄包含三個檢查點即文件複製偏移檢查點,恢復點偏移檢查點和更清潔的偏移檢查點。這些文件包含該目錄中可用分區的最後提交的偏移量,日誌端點檢查點和清理檢查點詳細信息。每個文件都包含版本號,編號,每個條目一行。

我們需要將這些文件複製/創建到新目錄,我們需要更新這些文件。我們需要調整兩個目錄(舊目錄和新目錄)中的條目。如果我們有大量的分區,這可能是乏味的。但如果我們有大量數據,這是最好的方法。通過這種方法,複製品將快速加入ISR。在羣集/網絡上的負載將會減少。

相關問題