變更 Managed Service for Apache Kafka 叢集中的分割區指派作業

本頁說明如何變更指派給 Managed Service for Apache Kafka 叢集中主題分割區的代理程式。

總覽

在 Managed Service for Apache Kafka 中建立新主題時,您可以選擇分區數量和複寫因數。

複寫因數是指儲存主題中每個分區副本的代理程式數量。其中一個代理程式會擔任領導者,其他則是追隨者。領導者會處理分區的寫入要求,追隨者則會複製資料。如果領導者發生故障,系統會選出其中一個追隨者擔任領導者。

如果叢集已啟用自動重新平衡功能,擴充叢集可能會導致系統重新指派分割區,以維持每個代理程式大約有相同數量的分割區。

您可能基於下列原因變更分區指派:

  • 您擴充已停用自動重新平衡功能的叢集,但新加入的代理程式未處理任何負載。

  • 某個分區的流量遠高於其他分區,您想將其他分區移至不同的代理程式,藉此隔離負載。

您可以使用 Kafka 指令列工具重新指派分割區,詳情請見下一節。

變更分區指派

如要變更指派給分割區的代理程式,請按照下列步驟操作。

  1. 在 Compute Engine VM 上安裝 Kafka 指令列工具。VM 必須能夠連上與叢集連線的子網路。詳情請參閱「使用 Kafka 指令列工具產生及取用訊息」。

  2. 呼叫 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 為 101112。沒有動態中介服務設定。

  3. 建立 JSON 檔案,列出要重新指派給不同代理人的主題。 按照下列範例格式設定檔案:

     {
       "topics": [
         { "topic": "topic-1" },
         { "topic": "topic-2" }
       ]
     }
    
  4. 使用 --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 會指派給代理程式 1210

  5. 建立 JSON 檔案,定義代理程式與分割區的對應關係。您可以從上一個步驟的建議重新指派開始,並視需要進行修改。

    舉例來說,下列對應會將 topic-1 的分區 0 移至代理程式 1110

    {
      "version":1,
      "partitions":[
        {
          "topic":"topic-1",
          "partition":0,
          "replicas":[11,10]
        }
      ]
    }
    
  6. 呼叫 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 檔案路徑。

後續步驟