

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從 ZooKeeper 遷移至 KRaft 模式
<a name="zk-to-kraft-migration"></a>

您可以使用 `UpdateClusterKafkaVersion` API 將現有的 ZooKeeper 型 MSK 叢集遷移至 KRaft 模式。遷移已就地執行 — 您的叢集在整個過程中仍然可用，而且不會移動任何資料。Amazon MSK 佈建 KRaft 控制器、將叢集中繼資料從 ZooKeeper 遷移至 KRaft 規定人數，以及自動解除委任 ZooKeeper 節點。

## 先決條件
<a name="zk-kraft-migration-prereqs"></a>

在將叢集從 ZooKeeper 遷移至 KRaft 模式之前，請確定下列事項：
+ 您的叢集正在 `3.9.x` ZooKeeper 模式下執行 Apache Kafka 版本。如果您的叢集位於較舊版本，請先`3.9.x`使用標準版本升級程序升級至 。
+ 您的叢集處於 `ACTIVE` 狀態，沒有待處理的操作。
+ 如果您使用依賴直接 ZooKeeper 存取的工具 （例如舊版 Cruise Control 或自訂管理工具），請將其更新為使用 Kafka Admin APIs，而非直接 ZooKeeper 連線。
+ 對於標準 （佈建） 叢集：必須停用 ZooKeeper 用戶端存取。在啟動遷移`ZookeeperAccess.Enabled=false`之前，使用 `UpdateConnectivity` API 來設定 。快速叢集不需要此步驟。
+ 所有用戶端應用程式都使用`--bootstrap-server`連線字串，而不是`--zookeeper`連線字串。遷移後無法使用 ZooKeeper 連線字串。
+ 您的叢集未同時啟用公有存取和開放監控。
+ 您的叢集不使用`kafka.t3.small`代理程式執行個體。
+ 您的叢集不使用動態公告接聽程式。若要檢查您的代理程式是否已動態設定 `advertised.listeners` 屬性，請執行下列命令，其中 `{{$bs}}`是叢集的引導伺服器連線字串，並確保輸出不包含 `advertised.listeners`：

  ```
  bin/kafka-configs.sh --bootstrap-server $bs --entity-type brokers --describe
  ```

  如需動態設定屬性的詳細資訊，請參閱 [動態 Amazon MSK 組態](msk-configuration-properties.md#msk-dynamic-confinguration)。

## 遷移期間發生的事
<a name="zk-kraft-migration-process"></a>

當您啟動 ZooKeeper-to-KRaft遷移時，Amazon MSK 會自動執行下列步驟：

1. Amazon MSK 會在您的叢集中佈建 KRaft 控制器節點。這些控制器包含在內，無需額外費用。

1. 資料平面遷移執行：代理程式會重新設定為使用中繼資料的 KRaft 規定人數，同時繼續提供用戶端流量。

1. 在向 KRaft 規定人數註冊所有代理程式之後，Amazon MSK 會停用 ZooKeeper 節點。

1. 叢集管理模式已更新為 KRaft。

遷移是一項長時間執行的操作，視叢集大小而定，可能需要數小時的時間。您可以使用 `DescribeClusterOperation` API 監控操作狀態。

**重要**  
遷移無法反轉。一旦叢集遷移至 KRaft 模式，您就無法將其切換回 ZooKeeper 模式。

## 使用 遷移 AWS CLI
<a name="zk-kraft-migration-howto"></a>

1. 驗證叢集的可用目標版本：

   ```
   aws kafka get-compatible-kafka-versions --cluster-arn {{ClusterArn}}
   ```

   如果您的叢集符合遷移資格，輸出會包含 KRaft `.kraft` 目標版本 （尾碼為 )。

1. 透過指定 KRaft 目標版本開始遷移：

   ```
   aws kafka update-cluster-kafka-version \
       --cluster-arn {{ClusterArn}} \
       --current-version {{Current-Cluster-Version}} \
       --target-kafka-version "3.9.x.kraft"
   ```
**重要**  
叢集版本不是簡單的整數。使用 `DescribeCluster`操作來尋找叢集的目前版本。

1. 監控遷移進度：

   ```
   aws kafka describe-cluster-operation --cluster-operation-arn {{ClusterOperationArn}}
   ```

   操作狀態會轉換至 ，`UPDATE_IN_PROGRESS`並使用 完成`UPDATE_COMPLETE`。

## 遷移後
<a name="zk-kraft-migration-after"></a>

遷移完成後：
+ 您的叢集以 KRaft 模式運作。所有中繼資料都由 KRaft 控制器管理。
+ ZooKeeper 節點已移除。ZooKeeper 連線字串不再可用。
+ 如果用戶端應用程式使用`--bootstrap-server`連線字串，則會繼續運作而不進行任何變更。
+ 如果您需要 KRaft 控制器端點進行開放式監控，您可以使用 `ListNodes` API 檢視它們。