Kinesis Data Analytics for Java Applications 中的应用程序扩展 - Amazon Kinesis Data Analytics
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Kinesis Data Analytics for Java Applications 中的应用程序扩展

您可以为 Amazon Kinesis Data Analytics for Java Applications 配置任务并行执行和资源分配以实施扩展。有关 Apache Flink 如何计划并行任务实例的信息,请参阅 Apache Flink 文档中的并行执行

配置应用程序 Parallelism 和 ParallelismPerKPU

您可以使用以下 ParallelismConfiguration 属性为 Kinesis Data Analytics for Java application 任务(例如,从源中读取或执行操作符)配置并行执行:

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

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

注意

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

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

分配 Kinesis 处理单元

Kinesis Data Analytics 以 KPU 形式预置容量。一个 KPU 可为您提供 1 个 vCPU 和 4 GB 内存。对于分配的每个 KPU,还提供了 50 GB 运行的应用程序存储。

Kinesis Data Analytics 使用 ParallelismParallelismPerKPU 属性计算运行应用程序所需的 KPU,如下所示:

Allocated KPUs for the application = Parallelism/ParallelismPerKPU

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

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

自动扩展

Kinesis Data Analytics 弹性地扩展应用程序的并行度,以满足大多数情况的源数据吞吐量和操作符复杂性要求。Kinesis Data Analytics 监控应用程序的资源 (CPU) 使用情况,并弹性地扩展应用程序的并行度。在 CPU 使用率出现持续高峰后的几分钟内,通常会触发应用程序扩展(增加并行度)。在 CPU 使用率出现下降后的几小时内,应用程序将会缩减(降低并行度)。Kinesis Data Analytics 不会将应用程序的 CurrentParallelism 值降低到小于应用程序的 Parallelism 设置。

您可以使用 AutoScalingEnabled 属性(FlinkApplicationConfiguration 的一部分)启用或禁用自动扩展行为。将根据 Kinesis Data Analytics 预置的 KPU 对您的 AWS 账户收费,KPU 数取决于应用程序的 parallelismparallelismPerKPU 设置。活动高峰将会增加您的 Kinesis Data Analytics 成本。

有关定价的信息,请参阅 Amazon Kinesis Data Analytics 定价

请注意有关应用程序扩展的以下内容:

  • 默认情况下,将会启用自动扩展。

  • 应用程序的默认限制为 32 个 KPU。有关更多信息,请参阅 限制

  • 在自动扩展更新应用程序并行度时,应用程序将会发生停机。为了避免这种停机,请执行以下操作:

更新应用程序的并行度

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

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

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

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

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

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

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