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

在 Managed Service for Apache Kafka 中,您可以變更指派給主題分區的 broker。重新指派主題分區,有助於平衡每個代理程式的負載,或隔離高流量代理程式的負載。

總覽

在 Managed Service for Apache Kafka 建立新主題時,您需要選擇分區數量和複製係數。

複製係數是指儲存主題中各分區副本的代理程式數量。其中一個代理程式會做為「leader」,其他代理程式則為「follower」。leader 會處理分區的寫入要求,follower 則會複製資料。如果領導者故障,其中一個追隨者會獲選為領導者。

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

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

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

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

您可以使用 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 為 10、11 和 12。沒有動態中介伺服器設定。

  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 會指派給代理 12 和 10。

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

    舉例來說,下列對應會將 topic-1 的分區 0 移至代理 11 和 10。

    {
      "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 檔案路徑。

後續步驟

Apache Kafka® 是 Apache Software Foundation 或其關係企業在美國和/或其他國家/地區的註冊商標。