在 Managed Service for Apache Kafka 中,您可以變更指派給主題分區的 broker。重新指派主題分區,有助於平衡每個代理程式的負載,或隔離高流量代理程式的負載。
總覽
在 Managed Service for Apache Kafka 建立新主題時,您需要選擇分區數量和複製係數。
複製係數是指儲存主題中各分區副本的代理程式數量。其中一個代理程式會做為「leader」,其他代理程式則為「follower」。leader 會處理分區的寫入要求,follower 則會複製資料。如果領導者故障,其中一個追隨者會獲選為領導者。
如果叢集已啟用自動重新平衡功能,擴充叢集資源可能會導致分區重新指派,以維持每個代理程式的分區數量大致相同。
您可能基於下列原因,需要變更分區指派:
您擴充了已停用自動重新平衡功能的叢集,而新加入的代理程式未處理任何負載。
某個分區收到的流量遠高於其他分區,您希望將其他分區移至不同的代理,藉此隔離負載。
您可以使用 Kafka 指令列工具重新指派分區,詳情請參閱下一節。
變更分區指派
如要變更指派給分區的代理,請按照下列步驟操作。
在 Compute Engine VM 上安裝 Kafka 指令列工具。VM 必須能連線至與叢集連結的子網路。詳情請參閱「使用 Kafka 指令列工具產生及使用訊息」。
呼叫
kafka-configs.sh --describe指令,取得叢集中的代理程式清單。kafka-configs.sh --describe --entity-type brokers \ --bootstrap-server=BOOTSTRAP_ADDRESS \ --command-config client.properties將 BOOTSTRAP_ADDRESS 替換為叢集的啟動位址。這個指令會傳回代理程式 ID 和動態代理程式設定的清單。
輸出內容範例:
Dynamic configs for broker 10 are: Dynamic configs for broker 11 are: Dynamic configs for broker 12 are: Default configs for brokers in the cluster are:在這個範例中,代理程式 ID 為
10、11和12。沒有動態中介伺服器設定。建立 JSON 檔案,列出要重新指派給不同代理的主題。請按照下列範例設定檔案格式:
{ "topics": [ { "topic": "topic-1" }, { "topic": "topic-2" } ] }使用
--generate旗標呼叫kafka-reassign-partitions.sh指令,取得目前的分區對應,並產生候選分區重新指派。kafka-reassign-partitions.sh --generate \ --bootstrap-server=BOOTSTRAP_ADDRESS \ --topics-to-move-json-file TOPICS_FILE \ --broker-list BROKER_LIST \ --command-config client.properties更改下列內容:
- TOPICS_FILE:上一個步驟中 JSON 檔案的路徑。
- BROKER_LIST:以半形逗號分隔的代理程式清單,主題的分區應重新指派給這些代理程式。範例:
11,10。
輸出內容範例:
Current partition replica assignment {"version":1,"partitions":[{"topic":"topic-1","partition":0,"replicas":[12,10],"log_dirs":["any","any"]}]} Proposed partition reassignment configuration {"version":1,"partitions":[{"topic":"topic-1","partition":0,"replicas":[11,10],"log_dirs":["any","any"]}]}在本例中,
topic-1的分區 0 會指派給代理12和10。建立 JSON 檔案,定義代理程式與分區的對應關係。您可以從上一個步驟中建議的重新指派作業開始,並視需要進行修改。
舉例來說,下列對應會將
topic-1的分區 0 移至代理11和10。{ "version":1, "partitions":[ { "topic":"topic-1", "partition":0, "replicas":[11,10] } ] }呼叫
kafka-reassign-partitions.sh --execute指令來指派分區。kafka-reassign-partitions.sh --execute \ --reassignment-json-file PARTITION_MAP \ --bootstrap-server=BOOTSTRAP_ADDRESS \ --command-config client.properties將 PARTITION_MAP 替換為上一步的 JSON 檔案路徑。
後續步驟
- Managed Service for Apache Kafka 的代理總覽
- 監控 Managed Service for Apache Kafka 叢集
- 規劃 Managed Service for Apache Kafka 叢集的大小