为 Managed Service for Apache Flink 应用程序启用系统回滚 - Managed Service for Apache Flink

Amazon Managed Service for Apache Flink(Amazon MSF)之前称为 Amazon Kinesis Data Analytics for Apache Flink。

为 Managed Service for Apache Flink 应用程序启用系统回滚

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

注意

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

工作方式

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

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

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

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

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

查看自动系统回滚的常见场景

以下场景说明自动系统回滚的优势:

  • 应用程序更新:如果在通过 main 方法初始化 Flink 作业时使用存在错误的新代码更新应用程序,则自动回滚允许恢复以前的正常工作版本。其他系统回滚可提供帮助的更新场景包括:

    • 如果您的应用程序已更新为以高于 maxParallelism 的并行度运行。

    • 如果您的应用程序更新为使用错误的 VPC 应用程序子网运行,从而导致 Flink 作业启动期间出现故障。

  • Flink 版本升级:当您升级到新的 Apache Flink 版本,并且升级后的应用程序遇到快照兼容性问题时,系统回滚允许您自动恢复到之前的 Flink 版本。

  • 自动扩展:如果应用程序纵向扩展,但由于快照和 Flink 作业图之间的运算符不匹配而在从保存点恢复时遇到问题。

使用操作 API 进行系统回滚

为提供更理想的可见性,Amazon Managed Service for Apache Flink 有两个与应用程序操作相关的 API,可以帮助您跟踪故障和相关的系统回滚。

ListApplicationOperations

此 API 按时间倒序列出了在应用程序上执行的所有操作,包括 UpdateApplicationMaintenanceRollbackApplication 和其他操作。ListApplicationOperations 操作的以下示例请求列出该应用程序的前 10 个应用程序操作:

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

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

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

DescribeApplicationOperation

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

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

有关问题排查信息,请参阅系统回滚最佳实践