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

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 如何调度任务并行实例的信息,请参阅 Apache Flink 文档中的并行执行

配置应用程序并行度和 ParallelismPerKPU

您可以使用以下ParallelismConfiguration属性为 Managed Service for Apache Flink 应用程序任务(例如从源读取或执行运算符)配置并行执行:

  • Parallelism — 使用该属性设置默认 Apache Flink 应用程序并行度。所有操作符、源和接收器以该并行度执行,除非在应用程序代码中覆盖它们。默认值为 1,最大值为 256

  • ParallelismPerKPU — 使用此属性可设置应用程序的每个 Kinesis 处理单元 (KPU) 可以计划的并行任务数。默认值为 1,最大值为 8。对于具有阻止操作(例如,I/O)的应用程序,较高的 ParallelismPerKPU 值导致完全使用 KPU 资源。

注意

Parallelism 的限制等于 ParallelismPerKPU 乘以 KPU 限制(默认值为 64)。可以请求增加限制以增加 KPU 限制。有关如何请求增加限制的说明,请参阅 服务限额中的“请求增加限制”。

有关为特定运算符设置任务并行度的信息,请参阅 Apache Flink 文档中的设置并行度:运算符。

分配 Kinesis 处理单元

Managed Service for Apache Flink 将容量配置为 KPU。一个 KPU 可为您提供 1 个 vCPU 和 4 GB 内存。对于分配的每个 KPU,还提供了 50 GB 运行的应用程序存储。

Managed Service for Apache Flink 使用ParallelismParallelismPerKPU 属性计算运行应用程序所需的 KPU,如下所示:

Allocated KPUs for the application = Parallelism/ParallelismPerKPU

Managed Service for Apache Flink 快速为应用程序提供资源,以应对出现的吞吐量或处理活动高峰。在活动高峰过后,它逐渐从应用程序中删除资源。要禁止自动分配资源,请将 AutoScalingEnabled 值设置为 false,如后面的更新应用程序的并行度中所述。

应用程序的默认 KPU 限制为 64 个。有关如何请求增加限制的说明,请参阅 服务限额中的“请求增加限制”。

注意

出于编排目的,需要额外收取 KPU 费用。有关更多信息,请参阅 Managed Service for Apache Flink 定价

更新应用程序的并行度

本节包含设置应用程序并行度的 API 操作的示例请求。有关如何将请求块与 API 操作一起使用的更多示例和说明,请参阅Managed Service for Apache Flink API 示例代码

CreateApplication 操作的以下示例请求在您创建应用程序时设置并行度:

{ "ApplicationName": "string", "RuntimeEnvironment":"FLINK-1_18", "ServiceExecutionRole":"arn:aws:iam::123456789123:role/myrole", "ApplicationConfiguration": { "ApplicationCodeConfiguration":{ "CodeContent":{ "S3ContentLocation":{ "BucketARN":"arn:aws:s3:::amzn-s3-demo-bucket", "FileKey":"myflink.jar", "ObjectVersion":"AbCdEfGhIjKlMnOpQrStUvWxYz12345" } }, "CodeContentType":"ZIPFILE" }, "FlinkApplicationConfiguration": { "ParallelismConfiguration": { "AutoScalingEnabled": "true", "ConfigurationType": "CUSTOM", "Parallelism": 4, "ParallelismPerKPU": 4 } } } }

UpdateApplication 操作的以下示例请求为现有的应用程序设置并行度:

{ "ApplicationName": "MyApplication", "CurrentApplicationVersionId": 4, "ApplicationConfigurationUpdate": { "FlinkApplicationConfigurationUpdate": { "ParallelismConfigurationUpdate": { "AutoScalingEnabledUpdate": "true", "ConfigurationTypeUpdate": "CUSTOM", "ParallelismPerKPUUpdate": 4, "ParallelismUpdate": 4 } } } }

UpdateApplication 操作的以下示例请求为现有的应用程序禁用并行度:

{ "ApplicationName": "MyApplication", "CurrentApplicationVersionId": 4, "ApplicationConfigurationUpdate": { "FlinkApplicationConfigurationUpdate": { "ParallelismConfigurationUpdate": { "AutoScalingEnabledUpdate": "false" } } } }

MaxParlelism 注意事项

Flink 作业可扩展的最大并行度受限于该作业所有运算符的最小 maxParallelism。例如,如果您有一个简单的作业,其中只有一个源和一个接收器,并且源有值为 16 的 maxParallelism,接收器有 8,那么应用程序就无法扩展到 8 以上的并行度。

要了解如何计算运算符的默认 maxParallelism 以及如何覆盖默认值,请参阅 Apache Flink 文档中的设置最大并行度

作为基本规则,请注意,如果您没有为任何运算符定义 maxParallelism,并且在启动应用程序时并行度小于或等于 128,则所有运算符都将具有 128 的 maxParallelism

注意

作业的最大并行度是扩展应用程序时保持状态的并行度上限。

如果您修改现有应用程序的 maxParallelism,则该应用程序将无法从以前使用 maxParallelism 创建的旧快照重新启动。您只能在没有快照的情况下重新启动应用程序。

如果您计划将应用程序扩展到大于 128 的并行度,则必须在应用程序中明确设置 maxParallelism

  • 自动扩展逻辑可以防止将 Flink 作业的并行度扩展到超过该作业的最大并行度。

  • 如果您使用自定义自动扩展或计划扩展,请对其进行配置,使其不会超过作业的最大并行度。

  • 如果您手动将应用程序扩展到超出最大并行度,则应用程序将无法启动。