

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

# 将您的应用程序升级到新的 Apache Flink 版本
<a name="upgrading-application-new-version"></a>

您可以使用[UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)操作升级 Flink 应用程序。

您可以通过多种方式调用 `UpdateApplication` API：
+ 使用 AWS 管理控制台上的现有**配置**工作流程。
  + 转至 AWS 管理控制台上的应用程序页面。
  + 选择**配置**。
  + 选择新的运行时和要从中启动的快照，也称为还原配置。使用最新设置作为还原配置，从最新的快照启动应用程序。指向 Amazon S3 JAR/zip 上新升级的应用程序。
+ 使用 “ AWS CLI [更新应用程序” 操作。](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/kinesisanalyticsv2/update-application.html)
+ 使用 CloudFormation (CFN)。
  + 更新字[RuntimeEnvironment](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-kinesisanalyticsv2-application.html#cfn-kinesisanalyticsv2-application-runtimeenvironment)段。以前， CloudFormation 删除了该应用程序并创建了一个新应用程序，这会导致您的快照和其他应用程序历史记录丢失。现在就 RuntimeEnvironment 地 CloudFormation 更新您的应用程序，并且不会删除您的应用程序。
+ 使用 AWS 软件开发工具包。
  + 有关您选择的编程语言，请参阅 SDK 文档。请参阅[UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)。

您可以在应用程序处于 `RUNNING` 状态或应用程序在 `READY` 状态中停止时执行升级。Amazon Managed Service for Apache Flink 会进行验证，以确认原始运行时版本和目标运行时版本之间的兼容性。此兼容性检查在您处于状态[UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)时执行，或者[StartApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StartApplication.html)如果您在`RUNNING`状态下升级，则在下次执行兼容性检查时运行。`READY`

## 升级处于 `RUNNING` 状态的应用程序
<a name="upgrading-running"></a>

以下示例显示了使用升级美国东部（弗吉尼亚北部）名为 `UpgradeTest` Flink 1.18 的`RUNNING`州的应用程序， AWS CLI 以及使用最新快照启动升级后的应用程序。

```
            
aws --region us-east-1 kinesisanalyticsv2 update-application \
--application-name UpgradeTest --runtime-environment-update "FLINK-1_18" \
--application-configuration-update '{"ApplicationCodeConfigurationUpdate": '\
'{"CodeContentUpdate": {"S3ContentLocationUpdate": '\
'{"FileKeyUpdate": "flink_1_18_app.jar"}}}}' \
 --run-configuration-update '{"ApplicationRestoreConfiguration": '\
 '{"ApplicationRestoreType": "RESTORE_FROM_LATEST_SNAPSHOT"}}' \
 --current-application-version-id ${current_application_version}
```
+ 如果您启用了服务快照并希望从最新快照继续运行应用程序，Amazon Managed Service for Apache Flink 会验证当前 `RUNNING` 应用程序的运行时是否与所选目标运行时兼容。
+ 如果您指定用于继续目标运行时的快照，则 Amazon Managed Service for Apache Flink 会验证目标运行时是否与指定的快照兼容。如果兼容性检查失败，则您的更新请求将被拒绝，并且您的应用程序将保持处于`RUNNING` 状态。
+ 如果您选择在没有快照的情况下启动应用程序，则 Amazon Managed Service for Apache Flink 不会运行任何兼容性检查。
+ 如果升级后的应用程序失败或卡在传递的 `UPDATING` 状态，请按照[回滚应用程序升级](rollback.md)部分中的说明恢复正常状态。

**运行中有状态应用程序的处理流程**

![\[下图显示了在运行期间升级应用程序的建议工作流程。假设应用程序是有状态的，并且您已启用快照。对于此工作流程，在更新时，您可以从更新之前由 Amazon Managed Service for Apache Flink 自动创建的最新快照恢复应用程序。\]](http://docs.aws.amazon.com/zh_cn/managed-flink/latest/java/images/in-place-update-while-running.png)


## 升级处于**就绪**状态的应用程序
<a name="upgrading-ready"></a>

以下示例展示如何使用 AWS CLI将美国东部（弗吉尼亚州北部）中处于 `READY` 状态且名为 `UpgradeTest` 的应用程序升级到 Flink 1.18。由于应用程序未运行，因此没有用于启动应用程序的指定快照。您可以在发出启动应用程序请求时指定快照。

```
            
aws --region us-east-1 kinesisanalyticsv2 update-application \
--application-name UpgradeTest --runtime-environment-update "FLINK-1_18" \
--application-configuration-update '{"ApplicationCodeConfigurationUpdate": '\
'{"CodeContentUpdate": {"S3ContentLocationUpdate": '\
'{"FileKeyUpdate": "flink_1_18_app.jar"}}}}' \
 --current-application-version-id ${current_application_version}
```
+ 您可以将处于 `READY` 状态的应用程序的运行时更新为任何 Flink 版本。Amazon Managed Service for Apache Flink 在您启动应用程序之前不会运行任何检查。
+  Amazon Managed Service for Apache Flink 仅对您为启动应用程序而选择的快照运行兼容性检查。这些是遵循 [Flink 兼容性表](https://nightlies.apache.org/flink/flink-docs-master/docs/ops/upgrading/#compatibility-table)的基本兼容性检查。它们只会检查创建快照时使用的 Flink 版本和作为目标的 Flink 版本。如果所选快照的 Flink 运行时与应用程序的新运行时不兼容，则启动请求可能会被拒绝。

**就绪状态应用程序的处理流程**

![\[下图显示升级就绪状态应用程序的建议工作流程。假设应用程序是有状态的，并且您已启用快照。对于此工作流程，在更新时，您可以从在应用程序停止由 Amazon Managed Service for Apache Flink 自动创建的最新快照恢复应用程序。\]](http://docs.aws.amazon.com/zh_cn/managed-flink/latest/java/images/in-place-update-while-ready.png)
