本頁說明如何變更指派給 Managed Service for Apache Kafka 叢集中主題分割區的代理程式。
總覽
在 Managed Service for Apache Kafka 中建立新主題時,您可以選擇分區數量和複寫因數。
複寫因數是指儲存主題中每個分區副本的代理程式數量。其中一個代理程式會擔任領導者,其他則是追隨者。領導者會處理分區的寫入要求,追隨者則會複製資料。如果領導者發生故障,系統會選出其中一個追隨者擔任領導者。
如果叢集已啟用自動重新平衡功能,擴充叢集可能會導致系統重新指派分割區,以維持每個代理程式大約有相同數量的分割區。
您可能基於下列原因變更分區指派:
您擴充已停用自動重新平衡功能的叢集,但新加入的代理程式未處理任何負載。
某個分區的流量遠高於其他分區,您想將其他分區移至不同的代理程式,藉此隔離負載。
您可以使用 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 叢集的大小