为 Apache Flink 应用程序创建托管服务 - Managed Service for Apache Flink
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

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

为 Apache Flink 应用程序创建托管服务

本主题包含如何创建 Managed Service for Apache Flink 的相关信息。

为 Apache 构建托管服务 Flink 应用程序代码

本节介绍用于为 Apache Flink 托管服务应用程序生成应用程序代码的组件。

我们建议您将支持的最新 Apache Flink 版本用于应用程序代码。有关升级 Managed Service for Apache Flink 应用程序的信息,请参见

您可以使用 Apache Maven 构建应用程序代码。Apache Maven 项目使用 pom.xml 文件以指定它使用的组件的版本。

注意

Managed Service for Apache Flink 支持大小不超过 512 MB 的 JAR 文件。如果使用的 JAR 文件超过该大小,应用程序将无法启动。

应用程序现在可以使用任何 Scala 版本的 Java API。您必须将自己选择的 Scala 标准库捆绑到您的 Scala 应用程序中。

有关为使用 Apache Beam 创建 Managed Service for Apache Flink 应用程序的信息,请参阅使用 Apache Beam

在使用 Managed Service for Apache Flink 版本 1.1.0 及更高版本时,您可以在编译应用程序时指定应用程序使用的 Apache Flink 版本。您需要为 Apache Flink 的版本提供参数。-Dflink.version例如,如果您使用的是 Apache Flink 1.19.1,请提供以下信息:

mvn package -Dflink.version=1.19.1

有关使用早期版本的 Apache Flink 构建应用程序的信息,请参阅。较早的版本

为 Apache Flink 应用程序创建托管服务

生成应用程序代码后,您可以执行以下操作来创建适用于 Apache Flink 的托管服务:

  • 上传应用程序代码:将应用程序代码上传到 Amazon S3 存储桶。在创建应用程序时,您可以指定应用程序代码的 S3 存储桶名称和对象名称。有关说明如何上传应用程序代码的教程,请参阅入门指南 (DataStream API)教程中的上传 Apache Flink 直播 Java 代码

  • 创建 Managed Service for Apache Flink 应用程序:使用以下方法之一创建 Managed Service for Apache Flink 应用程序:

    • 使用控制台创建适用于 Apache Flink 的托管服务:您可以使用 Amazon 控制台创建和配置应用程序。 Amazon

      当您使用控制台创建应用程序时,将为您创建应用程序的依赖资源(例如 CloudWatch 日志流、IAM 角色和 IAM 策略)。

      在使用控制台创建应用程序时,您可以从 Managed Service for Apache Flink - Create application(创建应用程序) 页面上的下拉列表中进行选择,以指定应用程序使用的 Apache Flink 版本。

      有关如何使用控制台创建应用程序的教程,请参阅入门指南 (DataStream API)教程中的创建并运行应用程序(控制台)

    • 使用 CLI 创建适用于 Apache Flink 应用程序的托管服务:您可以使用 Amazon C LI Amazon 创建和配置应用程序。

      使用 CLI 创建应用程序时,还必须手动创建应用程序的依赖资源(例如 CloudWatch 日志流、IAM 角色和 IAM 策略)。

      在使用 CLI 创建应用程序时,您可以使用 CreateApplication 操作的 RuntimeEnvironment 参数指定应用程序使用的 Apache Flink 版本。

      有关如何使用 CLI 创建应用程序的教程,请参阅入门指南 (DataStream API)教程中的创建并运行应用程序 (Amazon CLI)

    注意

    您可以更改RuntimeEnvironment现有应用程序的。要了解如何操作,请参阅 Apache Flink 的就地版本升级

启动适用于 Apache 的托管服务 Flink 应用程序

在构建应用程序代码、将其上传到 S3 并创建 Managed Service for Apache Flink应用程序后,您可以启动应用程序。启动 Managed Service for Apache Flink 应用程序通常需要几分钟。

可以使用以下方法之一以启动应用程序:

  • 使用控制台启动适用于 Apache Flink 的托管服务:您可以通过在 Amazon 控制台的应用程序页面上选择 “运行” 来运行应用程序。 Amazon

  • 使用 AP Amazon I 启动适用于 Apache Flink 的托管服务:您可以使用操作运行应用程序。StartApplication

验证适用于 Apache Flink 应用程序的托管服务

您可以通过以下方式验证应用程序是否正常工作:

  • 使用 CloudWatch 日志:您可以使用 CloudWatch 日志和 CloudWatch 日志见解来验证您的应用程序是否正常运行。有关在 Apache Flink 托管服务应用程序中使用 CloudWatch 日志的信息,请参阅。日记账记录和监控

  • 使用 CloudWatch 指标:您可以使用 CloudWatch 指标来监控应用程序的活动,或者您的应用程序用于输入或输出的资源(例如 Kinesis 流、Firehose 流或 Amazon S3 存储桶)中的活动。有关 CloudWatch 指标的更多信息,请参阅 Amazon CloudWatch 用户指南中的使用指标

  • 监控输出位置:如果应用程序将输出写入到某个位置(例如 Amazon S3 存储桶或数据库),您可以在该位置中监控写入的数据。

为适用于 Apache Flink 的托管服务应用程序启用系统回滚

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

注意

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

工作方式

当您启动应用程序操作(例如更新或扩展操作)时,适用于 Apache Flink 的亚马逊托管服务会首先尝试运行该操作。如果它检测到阻碍操作成功的问题,例如代码错误或权限不足,则该服务会自动启动操作。RollbackApplication

回滚会尝试将应用程序恢复到成功运行的先前版本以及相关的应用程序状态。如果回滚成功,则您的应用程序将继续使用先前版本处理数据,最大限度地减少停机时间。如果自动回滚也失败,则适用于 Apache Flink 的 Amazon 托管服务会将应用程序转换为READY状态,以便您可以采取进一步的措施,包括修复错误和重试操作。

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

以下示例UpdateApplication操作请求允许应用程序进行系统回滚:

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

常见场景

以下场景说明了自动系统回滚的好处:

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

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

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

操作接口

为了提供更好的可见性,适用于 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" }

有关故障排除信息,请参阅系统回滚最佳实践