

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

# 创建 Managed Service for Apache Flink 应用程序
<a name="how-creating-apps"></a>

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

**Topics**
+ [构建 Managed Service for Apache Flink 应用程序代码](#how-creating-apps-building)
+ [创建 Managed Service for Apache Flink 应用程序](#how-creating-apps-creating)
+ [使用客户自主管理型密钥](#how-creating-apps-use-cmk)
+ [启动您的 Managed Service for Apache Flink 应用程序](#how-creating-apps-starting)
+ [验证 Managed Service for Apache Flink 应用程序](#how-creating-apps-verifying)
+ [为 Managed Service for Apache Flink 应用程序启用系统回滚](how-system-rollbacks.md)

## 构建 Managed Service for Apache Flink 应用程序代码
<a name="how-creating-apps-building"></a>

本节介绍用来为 Managed Service for Apache Flink 应用程序构建应用程序代码的组件。

我们建议您将支持的最新 Apache Flink 版本用于应用程序代码。有关升级 Managed Service for Apache Flink 应用程序的信息，请参见[使用 Apache Flink 的就地版本升级](how-in-place-version-upgrades.md)。

您可以使用 [Apache Maven](https://maven.apache.org/) 构建应用程序代码。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 应用程序结合使用](how-creating-apps-beam.md) 。

### 指定应用程序的 Apache Flink 版本
<a name="how-creating-apps-building-flink"></a>

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

```
mvn package -Dflink.version=2.2.0
```

对于使用旧版本的 Apache Flink 构建应用程序，请参阅 [早期版本](earlier.md)。

## 创建 Managed Service for Apache Flink 应用程序
<a name="how-creating-apps-creating"></a>

在构建应用程序代码后，您可以执行以下操作以创建 Managed Service for Apache Flink（Amazon MSF）应用程序：
+ **上传应用程序代码**：将应用程序代码上传到 Amazon S3 存储桶。在创建应用程序时，您可以指定应用程序代码的 S3 存储桶名称和对象名称。有关说明如何上传应用程序代码的教程，请参阅 [教程：开始使用 Apache Flink 托管服务中的 DataStream API](getting-started.md) 教程。
+ **创建 Managed Service for Apache Flink 应用程序**：使用以下方法之一创建 Amazon MSF 应用程序：
**注意**  
默认情况下，Amazon MSF 使用加密您的应用程序。 AWS 拥有的密钥您也可以使用 AWS KMS 客户托管密钥 (CMKs) 创建新应用程序，以便自己创建、拥有和管理您的密钥。有关的信息 CMKs，请参见[Amazon Managed Service for Apache Flink 中的密钥管理](key-management-flink.md)。
  + **使用 AWS 控制台创建 Amazon MSF 应用程序：**您可以使用 AWS 控制台创建和配置应用程序。

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

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

    有关如何使用控制台创建应用程序的教程，请参阅 [教程：开始使用 Apache Flink 托管服务中的 DataStream API](getting-started.md) 教程。
  + **使用 AWS CLI 创建您的 Amazon MSF 应用程序：**您可以使用 C AWS LI 创建和配置您的应用程序。

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

    在使用 CLI 创建应用程序时，您可以使用 `CreateApplication` 操作的 `RuntimeEnvironment` 参数指定应用程序使用的 Apache Flink 版本。
**注意**  
您可以更改现有应用程序的 `RuntimeEnvironment`。要了解如何操作，请参阅[使用 Apache Flink 的就地版本升级](how-in-place-version-upgrades.md)。

## 使用客户自主管理型密钥
<a name="how-creating-apps-use-cmk"></a>

在 Amazon MSF 中，客户托管密钥 (CMKs) 是一项功能，您可以使用自己在 AWS Key Management Service (AWS KMS) 上创建、拥有和管理的密钥来加密应用程序的数据。对于 Amazon MSF 应用程序，这意味着所有受 Flink [检查点](how-fault.md)或[快照](how-snapshots.md)约束的数据都使用您为该应用程序定义的 CMK 进行加密。

要在应用程序中使用 CMK，必须先[创建新应用程序](#how-creating-apps-creating)，然后应用 CMK。有关使用的更多信息 CMKs，请参阅[Amazon Managed Service for Apache Flink 中的密钥管理](key-management-flink.md)。

## 启动您的 Managed Service for Apache Flink 应用程序
<a name="how-creating-apps-starting"></a>

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

可以使用以下方法之一以启动应用程序：
+ **使用控制台启动适用于 Apache Flink 的托管服务：您可以通过在 AWS 控制台**的应用程序页面上选择 “**运行**” 来运行应用程序。 AWS 
+ **使用 AP AWS I 启动适用于 Apache Flink 的托管服务：**您可以使用操作运行应用程序。[StartApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_StartApplication.html)

## 验证 Managed Service for Apache Flink 应用程序
<a name="how-creating-apps-verifying"></a>

您可以通过以下方式验证应用程序是否正常工作：
+ **使用 CloudWatch 日志：**您可以使用 CloudWatch 日志和 CloudWatch 日志见解来验证您的应用程序是否正常运行。有关在 Apache Flink 托管服务应用程序中使用 CloudWatch 日志的信息，请参阅。[Amazon Managed Service for Apache Flink 的日志记录和监控](monitoring-overview.md)
+ **使用 CloudWatch 指标：**您可以使用 CloudWatch 指标来监控应用程序的活动，或者您的应用程序用于输入或输出的资源（例如 Kinesis 流、Firehose 流或 Amazon S3 存储桶）中的活动。有关 CloudWatch 指标的更多信息，请参阅 Amazon CloudWatch 用户指南中的[使用指标](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/working_with_metrics.html)。
+ **监控输出位置**：如果应用程序将输出写入到某个位置（例如 Amazon S3 存储桶或数据库），您可以在该位置中监控写入的数据。

# 为 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)。