

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

# 为 Managed Service for Apache Flink 应用程序启用系统回滚
<a name="how-system-rollbacks"></a>

借助系统回滚功能，您可以提高在 Amazon Managed Service for Apache Flink 上运行的 Apache Flink 应用程序的可用性。选择此配置后，当诸如 `UpdateApplication` 或 `autoscaling` 之类的操作遇到代码或配置错误时，该服务可以自动将应用程序恢复到之前运行的版本。

**注意**  
您必须通过更新应用程序选择加入，然后才能使用系统回滚。默认情况下，现有应用程序不会自动使用系统回滚。

## 工作原理
<a name="how-rollback-works"></a>

当您启动应用程序操作（例如更新或扩展操作）时，Amazon Managed Service for Apache Flink 会首先尝试运行该操作。如果它检测到阻止操作取得成功的问题（例如代码错误或权限不足），则该服务会自动启动 `RollbackApplication` 操作。

回滚尝试将应用程序恢复到已成功运行的上一个版本以及关联的应用程序状态。如果回滚取得成功，应用程序将继续使用先前版本处理数据，将停机时间降至最低。如果自动回滚也失败，Amazon Managed Service for Apache Flink 将应用程序转换为 `READY` 状态，这样您就可以采取进一步的行动，例如修复错误和重试该操作。

您必须选择加入以使用自动系统回滚。从现在起，您可以使用控制台或 API 为应用程序上的所有操作启用自动系统回滚。

`UpdateApplication` 操作的以下示例请求为应用程序启用系统回滚：

```
{
   "ApplicationName": "MyApplication",
   "CurrentApplicationVersionId": 1,
   "ApplicationConfigurationUpdate": { 
      "ApplicationSystemRollbackConfigurationUpdate": { 
         "RollbackEnabledUpdate": "true"
       }
    }
}
```

## 查看自动系统回滚的常见场景
<a name="common-scenarios"></a>

以下场景说明自动系统回滚的优势：
+ **应用程序更新：**如果在通过 main 方法初始化 Flink 作业时使用存在错误的新代码更新应用程序，则自动回滚允许恢复以前的正常工作版本。其他系统回滚可提供帮助的更新场景包括：
  + 如果您的应用程序已更新为以高于 [maxParallelism](https://docs.aws.amazon.com/managed-flink/latest/java/how-scaling.html#how-scaling-auto) 的并行度运行。
  + 如果您的应用程序更新为使用错误的 VPC 应用程序子网运行，从而导致 Flink 作业启动期间出现故障。
+ **Flink 版本升级：**当您升级到新的 Apache Flink 版本，并且升级后的应用程序遇到快照兼容性问题时，系统回滚允许您自动恢复到之前的 Flink 版本。
+ **AutoScaling：**由于快照和 Flink 作业图之间的操作员不匹配，应用程序向上扩展但从保存点恢复时遇到问题。

## 使用操作 APIs 进行系统回滚
<a name="operation-apis"></a>

为了提供更好的可见性，Amazon Apache Flink 托管服务提供了两个 APIs 与应用程序操作相关的服务，可以帮助您跟踪故障和相关的系统回滚。

`ListApplicationOperations`

此 API 按时间倒序列出了在应用程序上执行的所有操作，包括 `UpdateApplication`、`Maintenance`、`RollbackApplication` 和其他操作。`ListApplicationOperations` 操作的以下示例请求列出该应用程序的前 10 个应用程序操作：

```
{
   "ApplicationName": "MyApplication",
   "Limit": 10
}
```

`ListApplicationOperations` 的以下示例请求可帮助筛选应用程序先前更新的列表：

```
{
   "ApplicationName": "MyApplication",
   "operation": "UpdateApplication"
}
```

`DescribeApplicationOperation`

此 API 提供有关 `ListApplicationOperations` 列出的特定操作的详细信息，包括失败原因（如果适用）。`DescribeApplicationOperation` 操作的以下示例请求列出特定应用程序操作的详细信息：

```
{
   "ApplicationName": "MyApplication",
   "OperationId": "xyzoperation"
}
```

有关问题排查信息，请参阅[系统回滚最佳实践](troubleshooting-system-rollback.md)。