

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 从 Kraft 模式迁移 ZooKeeper 到
<a name="zk-to-kraft-migration"></a>

您可以使用 API 将现有 ZooKeeper-based MSK 集群迁移到 Kraft 模式。`UpdateClusterKafkaVersion`迁移是在原地执行的 — 您的集群在整个过程中保持可用，不会移动任何数据。亚马逊 MSK 配置 Kraft 控制器，将集群元数据从 Kraft 法定数目迁移 ZooKeeper 到 Kraft 法定人数，并自动停用节点。 ZooKeeper 

## 先决条件
<a name="zk-kraft-migration-prereqs"></a>

在将集群从 ZooKeeper Kraft 模式迁移之前，请确保满足以下条件：
+ 您的集群正在 ZooKeeper 模式下运行 Apache Kafka 版本`3.9.x`。如果您的集群使用的是旧版本，请`3.9.x`先使用标准版本升级流程升级到。
+ 您的集群处于没有待处理操作的`ACTIVE`状态。
+ 如果您使用依赖直接 ZooKeeper 访问的工具（例如旧版本的 Cruise Control 或自定义管理工具），请将其更新为使用 Kafka 管理员 API 而不是直接 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. 亚马逊 MSK 在您的集群中配置 Kraft 控制器节点。这些控制器均包含在内，无需额外付费。

1. 数据平面迁移正在运行：代理商经过重新配置，在继续为客户流量提供服务的同时，使用 Kraft 法定人数获取元数据。

1. 在所有经纪人向 Kraft 法定人数注册后，亚马逊 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 查看它们。