將服務器添加到Kafka集羣很簡單,只需爲它們分配一個唯一的代理ID並在新服務器上啓動Kafka即可。但是,這些新服務器不會自動分配任何數據分區,因此除非將分區移動到它們,否則在創建新主題之前它們不會執行任何工作。因此,通常在將計算機添加到羣集時,您需要將一些現有數據遷移到這些計算機。
遷移數據的過程是手動啓動的,但完全自動化。發生的事情是,Kafka將添加新服務器作爲其正在遷移的分區的跟隨者,並允許它完全複製該分區中的現有數據。當新服務器完全複製此分區的內容並加入同步副本時,其中一個現有副本將刪除其分區的數據。
分區重新分配工具可用於跨代理移動分區。理想的分區分佈將確保所有代理的均勻數據負載和分區大小。分區重新分配工具無法自動研究Kafka羣集中的數據分佈並移動分區以實現均勻的負載分配。因此,管理員必須弄清楚應該移動哪些主題或分區。
分區重新分配工具可以以3種互斥模式運行:
- --generate:在此模式下,給定主題列表和代理列表,該工具會生成候選重新分配,以將指定主題的所有分區移動到新代理。此選項僅提供了一種方便的方法,可在給定主題和目標代理列表的情況下生成分區重新分配計劃。
- --execute:在此模式下,該工具根據用戶提供的重新分配計劃啓動分區的重新分配。(使用--reassignment-json-file選項)。這可以是由管理員手工製作的自定義重新分配計劃,也可以使用--generate選項提供
- --verify:在此模式下,該工具將驗證最後一次--execute期間列出的所有分區的重新分配狀態。狀態可以是成功完成,失敗或正在進行中
分區重新分配工具可用於將一些主題從當前的代理集移動到新添加的代理。這在擴展現有集羣時通常很有用,因爲將整個主題移動到新的代理集更容易,而不是一次移動一個分區。當用於執行此操作時,用戶應提供應移動到新的代理集的主題列表和新代理的目標列表。然後,該工具在新的代理集中均勻分配給定主題列表的所有分區。在此移動期間,主題的複製因子保持不變。有效地,輸入主題列表的所有分區的副本將從舊的代理集移動到新添加的代理。
例如,以下示例將主題foo1,foo2的所有分區移動到新的代理集5,6。在此移動結束時,主題foo1和foo2的所有分區將僅存在於代理5,6上。
由於該工具接受主題的輸入列表作爲json文件,因此首先需要確定要移動的主題並創建json文件,如下所示:
1 2 3 4 五 |
|
準備好json文件後,使用分區重新分配工具生成候選分配:
1 2 3 4 五 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
該工具生成一個候選分配,將所有分區從主題foo1,foo2移動到代理5,6。但請注意,此時分區移動尚未開始,它只是告訴您當前的分配和建議的新分配。應保存當前分配,以防您想要回滾它。新的賦值應保存在json文件中(例如expand-cluster-reassignment.json),以使用--execute選項輸入到工具,如下所示:
1 2 3 4 五 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
最後,--verify選項可與該工具一起使用,以檢查分區重新分配的狀態。請注意,相同的expand-cluster-reassignment.json(與--execute選項一起使用)應與--verify選項一起使用:
1 2 3 4 五 6 7 8 |
|