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 がタスクの並列インスタンスをスケジュールする方法については、Apache Flink ドキュメントの「Parallel Execution」を参照してください。

アプリケーションの並列処理と ParallelismPerKPU を設定する

Apache Flink アプリケーション用 Managed Serviceタスク (ソースからの読み取りやオペレータの実行など) のparallel 実行は、次の「ParallelismConfiguration」プロパティを使用して設定します。

  • Parallelism — このプロパティを使用して、デフォルトの Apache Flink アプリケーション並列処理を設定します。すべてのオペレータ、ソース、シンクは、アプリケーションコードでオーバーライドされない限り、この並列処理で実行されます。デフォルトは 1 で、最大値は 256 です。

  • ParallelismPerKPU — このプロパティを使用して、使用しているアプリケーションの Kinesis Processing Unit (KPU) あたりにスケジュールできるparallel タスクの数を設定します。デフォルトは 1 で、最大は 8 です。ブロッキングオペレーション (I/O など) を行うアプリケーションでは、ParallelismPerKPU の値が大きいほど KPU リソースを最大限に活用できます。

注記

Parallelismの上限は、KPUの上限(デフォルトは64)の ParallelismPerKPU 倍です(デフォルトは64)。KPU の上限は、制限の引き上げをリクエストすることで増やすことができます。制限の引き上げをリクエストする方法については、「Service Quotas」 の 「制限の引き上げをリクエストするには」 を参照してください。

特定のオペレーターにタスクの並列処理を設定する方法については、Apache Flink ドキュメントの「Setting the Parallelism: Operator」を参照してください。

Kinesis 処理ユニットを割り当てる

Apache Flink 用 Managed Service 1 つの KPU で 1 つの vCPU および 4 GB のメモリーが提供されます。割り当てられた KPU ごとに、50 GB の実行中のアプリケーションストレージも提供されます。

Apache Flink 用 Managed Serviceは、次のように Parallelism および ParallelismPerKPU プロパティを使用してアプリケーションの実行に必要な KPU を計算します。

Allocated KPUs for the application = Parallelism/ParallelismPerKPU

Apache Flink 用 Managed Service は、スループットや処理アクティビティの急増に応じて、アプリケーションリソースを迅速に提供します。アクティビティの急増が過ぎると、アプリケーションから徐々にリソースを削除します。リソースの自動割り当てを無効にするには、アプリケーションの並列処理を更新する で後述するように、AutoScalingEnabled 値を false に設定します。

アプリケーションの KPU のデフォルト制限は 64 です。制限の引き上げをリクエストする方法については、「Service Quotas」の 「制限の引き上げをリクエストするには」 を参照してください。

注記

オーケストレーションの目的で追加の 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" } } } }

最大並列度に関する考慮事項

Flink ジョブがスケールできる最大並列処理数は、ジョブのすべてのオペレーターの最小 maxParallelism によって制限されます。例えば、ソースとシンクのみを持つシンプルなジョブがあり、ソースの maxParallelism が 16 で、シンクが 8 の場合、アプリケーションは並列処理数の 8 を超えてスケールすることはできません。

オペレーターのデフォルト maxParallelism の計算方法とデフォルトを上書きする方法については、Apache Flink ドキュメントの「Setting the Maximum Parallelism」を参照してください。

基本的なルールとして、オペレーターに maxParallelism を定義せず、並列処理数を 128 以下に設定してアプリケーションを起動すると、すべてのオペレーターは maxParallelism が 128 になることに注意してください。

注記

ジョブの最大並列処理数は、状態を保持しているアプリケーションをスケールする際の並列処理数の上限です。

既存のアプリケーションの maxParallelism を変更すると、アプリケーションは従来の maxParallelism で作成された以前のスナップショットから再起動できなくなります。アプリケーションはスナップショットなしでしか再起動できません。

アプリケーションを 128 を超える並列処理にスケールする場合は、アプリケーションで maxParallelism を明示的に設定する必要があります。

  • 自動スケーリングロジックは、ジョブの最大並列処理数を超える並列処理数にまで Flink ジョブをスケールすることを防ぎます。

  • カスタムの自動スケーリングまたはスケジュールされたスケーリングを使用する場合は、ジョブの最大並列処理数を超えないように設定します。

  • 最大並列処理数を超えてアプリケーションを手動でスケールすると、アプリケーションの起動に失敗します。