

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

# 回滚至先前 KCL 版本
<a name="kcl-migration-rollback"></a>

本主题介绍将消费端回滚到先前版本的步骤。需要回滚时，可执行一个两步流程：

1. 运行 [KCL Migration Tool](https://github.com/awslabs/amazon-kinesis-client/blob/master/amazon-kinesis-client/scripts/KclMigrationTool.py)。

1. 重新部署以前的 KCL 版本代码（可选）。

## 步骤 1：运行 KCL 迁移工具
<a name="kcl-migration-rollback-tool"></a>

当需要回滚到先前 KCL 版本时，必须运行 KCL 迁移工具。KCL 迁移工具可完成两项重要任务：
+ 它在 DynamoDB 中的租约表上移除一个名为工作线程指标表的元数据表和全局二级索引。这两个构件由 KCL 3.x 创建，但在回滚到先前版本时并不需要。
+ 它使所有工作程序在与 KCL 2.x 兼容的模式下运行，并开始使用先前 KCL 版本中使用的负载平衡算法。如果 KCL 3.x 中的新负载均衡算法存在问题，这将立即缓解问题。

**重要**  
DynamoDB 中的协调器状态表必须存在，并且在迁移、回滚和前滚过程中不得删除。

**注意**  
重要的是，使用者应用程序中的所有工作线程在给定时间均使用相同的负载均衡算法。KCL 迁移工具可确保 KCL 3.x 使用者应用程序中的所有工作线程都切换到 KCL 2.x 兼容模式，以便在部署回滚到先前 KCL 版本期间，所有工作线程都运行相同的负载均衡算法。

您可以在 [KCL 存储库的脚本目录中下载 [KCL GitHub](https://github.com/awslabs/amazon-kinesis-client/tree/master) 迁移工具](https://github.com/awslabs/amazon-kinesis-client/blob/master/amazon-kinesis-client/scripts/KclMigrationTool.py)。可以从任何工作程序或具备以下必需权限的主机上运该脚本：写入协调器状态表、删除工作程序指标表以及更新租约表的权限。可参考 [KCL 消费端应用程序所必需的 IAM 权限](kcl-iam-permissions.md) 获取运行脚本所需的 IAM 权限。每个 KCL 应用程序只能运行该脚本一次。您可使用以下命令运行 KCL 迁移工具：

```
python3 ./KclMigrationTool.py --region <region> --mode rollback [--application_name <applicationName>] [--lease_table_name <leaseTableName>] [--coordinator_state_table_name <coordinatorStateTableName>] [--worker_metrics_table_name <workerMetricsTableName>]
```

**参数**
+ --region：`<region>`替换为你的。 AWS 区域
+ --application\$1name：如果您为 DynamoDB 元数据表（租约表、协调器状态表和工作线程指标表）使用默认名称，则需要此参数。如果您为这些表指定了自定义名称，则可以忽略此参数。将 `<applicationName>` 替换为实际的 KCL 应用程序名称。如果未提供自定义名称，该工具将使用此名称来派生默认表名称。
+ --lease\$1table\$1name（可选）：如果您在 KCL 配置中为租约表设置了自定义名称，则需要此参数。如果您使用的是默认表名称，则可以忽略此参数。将 `leaseTableName` 替换为您为租约表指定的自定义表名称。
+ --coordinator\$1state\$1table\$1name（可选）：如果您在 KCL 配置中为协调器状态表设置了自定义名称，则需要此参数。如果您使用的是默认表名称，则可以忽略此参数。将 `<coordinatorStateTableName>` 替换为您为协调器状态表指定的自定义表名称。
+ --worker\$1metrics\$1table\$1name（可选）：如果您在 KCL 配置中为工作线程指标表设置了自定义名称，则需要此参数。如果您使用的是默认表名称，则可以忽略此参数。将 `<workerMetricsTableName>` 替换为您为工作线程指标表指定的自定义表名称。

## 步骤 2：使用先前 KCL 版本重新部署代码（可选）
<a name="kcl-migration-rollback-redeploy"></a>

 运行 KCL 迁移工具来进行回滚后，您将看到以下消息之一：
+ **消息 1：**“回滚已完成。您的 KCL 应用程序正在运行 KCL 2.x 兼容模式。如果您看不到回归缓解，请使用先前 KCL 版本部署代码，回滚到先前的应用程序二进制文件。”
  + **必需的操作：**这意味着您的工作人员正在 KCL 2.x 兼容模式下运行。如果仍有问题，请使用先前 KCL 版本将代码重新部署到工作程序。
+ **消息 2：**“回滚已完成。您的 KCL 应用程序正在运行 KCL 3.x 功能模式。您无需回滚到以前的应用程序二进制文件，除非在 5 分钟内看不到任何缓解该问题的措施。如果仍有问题，请使用先前 KCL 版本部署代码，以回滚到先前的应用程序二进制文件。”
  + **必需的操作：**这意味着您的工作人员在 KCL 3.x 模式下运行，KCL 迁移工具已将所有工作人员切换到兼容 KCL 2.x 的模式。如果问题得到解决，则无需使用之前的 KCL 版本重新部署代码。如果仍有问题，请使用先前 KCL 版本将代码重新部署到工作程序。

 