

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Managed Service for Apache Flink でアプリケーションスケーリングを実装する
<a name="how-scaling"></a>

スケーリングを実装するために、Amazon Managed Service for Apache Flink のタスクの並列実行とリソースの割り当てを設定できます。Apache Flink がタスクの並列インスタンスをスケジュールする方法については、Apache Flink ドキュメントの「[Parallel Execution](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/)」を参照してください。

**Topics**
+ [アプリケーションの並列処理と ParallelismPerKPU を設定する](#how-parallelism)
+ [Kinesis 処理ユニットを割り当てる](#how-scaling-kpus)
+ [アプリケーションの並列処理を更新する](#how-scaling-howto)
+ [Managed Service for Apache Flink で自動スケーリングを使用する](how-scaling-auto.md)
+ [最大並列度に関する考慮事項](#how-scaling-auto-max-parallelism)

## アプリケーションの並列処理と ParallelismPerKPU を設定する
<a name="how-parallelism"></a>

Apache Flink アプリケーション用 Managed Serviceタスク (ソースからの読み取りやオペレータの実行など) のparallel 実行は、次の「[https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ApplicationConfiguration.html](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_ApplicationConfiguration.html)」プロパティを使用して設定します。
+ `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](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)」 の 「制限の引き上げをリクエストするには」 を参照してください。

特定のオペレーターにタスクの並列処理を設定する方法については、Apache Flink ドキュメントの「[Setting the Parallelism: Operator](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/#operator-level)」を参照してください。

## Kinesis 処理ユニットを割り当てる
<a name="how-scaling-kpus"></a>

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 は、スループットや処理アクティビティの急増に応じて、アプリケーションリソースを迅速に提供します。アクティビティの急増が過ぎると、アプリケーションから徐々にリソースを削除します。リソースの自動割り当てを無効にするには、[アプリケーションの並列処理を更新する](#how-scaling-howto) で後述するように、`AutoScalingEnabled` 値を `false` に設定します。

アプリケーションの KPU のデフォルト制限は 64 です。制限の引き上げをリクエストする方法については、「[Service Quotas](https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html)」の 「制限の引き上げをリクエストするには」 を参照してください。

**注記**  
オーケストレーションの目的で追加の KPU が課金されます。詳細については、「[Managed Service for Apache Flink の料金](https://aws.amazon.com/kinesis/data-analytics/pricing/)」 を参照してください

## アプリケーションの並列処理を更新する
<a name="how-scaling-howto"></a>

このセクションには、アプリケーションの並列処理を設定する API アクションのサンプルリクエストが含まれています。API アクションでリクエストブロックを使用する方法のその他の例と手順については、[Managed Service for Apache Flink API コードの例](api-examples.md) を参照してください。

以下の「[https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_CreateApplication.html)」アクションのリクエスト例では、アプリケーションの作成時に並列処理を設定します。

```
{
   "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
         }
      }
   }
}
```

次の [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) アクションのリクエスト例では、既存のアプリケーションの並列処理を設定します。

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

次の [https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_UpdateApplication.html) アクションのリクエストの例では、既存のアプリケーションの並列処理が無効になります。

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

# Managed Service for Apache Flink で自動スケーリングを使用する
<a name="how-scaling-auto"></a>

Apache Flink 用 Managed Service は、ほとんどのシナリオでソースのデータスループットとオペレーターの複雑さに対応できるように、アプリケーションの並列度を柔軟にスケーリングします。自動スケーリングはデフォルトで有効になっている。Apache Flink 用 Managed Service は、アプリケーションのリソース (CPU) 使用状況を監視し、それに応じてアプリケーションの並列度を柔軟にスケールアップまたはスケールダウンします。
+ CloudWatch メトリクスの最大 `containerCPUUtilization` が 15 分間 75% 以上になると、アプリケーションがスケールアップ (並列処理数が増加) します。つまり、1 分間で 75 パーセント以上の連続したデータポイントが 15 個あると、`ScaleUp` アクションが開始されます。`ScaleUp` アクションはアプリケーションの `CurrentParallelism` を 2 倍にします。`ParallelismPerKPU` は変更されません。その結果、割り当てられた KPU の数も 2 倍になります。
+ CPU 使用率が 6 時間にわたって 10% を下回ると、アプリケーションはスケールダウン (並列処理が減少) します。つまり、1 分間の期間が 10% 未満の連続するデータポイントが 360 個ある場合に、`ScaleDown` アクションが開始されます。`ScaleDown` アクションは、アプリケーションの並列処理を半分にします (切り上げ)。`ParallelismPerKPU` は変更されず、割り当てられた KPU の数も半分になります (切り上げ)。

**注記**  
1 分間の `containerCPUUtilization` の最大値は、スケーリングアクションに使用するデータポイントとの相関を見つけるために参照できますが、アクションが開始された正確な瞬間を反映する必要はありません。

Apache Flink 用 Managed Service では、アプリケーションの `CurrentParallelism` 値がアプリケーションの `Parallelism` 設定を下回ることはありません。

Apache Flink 用 Managed Serviceサービスがアプリケーションをスケーリングしているときは、`AUTOSCALING` 状態になります。現在のアプリケーションのステータスは、「[DescribeApplication](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_DescribeApplication.html)」アクションまたは「[ListApplications](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_ListApplications.html)」アクションを使用して確認できます。サービスがアプリケーションをスケーリングしている間、使用できる有効な API アクションは、`Force` パラメータを `true` に設定した「[StopApplication](https://docs.aws.amazon.com//managed-flink/latest/apiv2/API_ListApplications.html)」だけです。

`AutoScalingEnabled` プロパティ (「[https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_FlinkApplicationConfiguration.html](https://docs.aws.amazon.com/managed-service-for-apache-flink/latest/apiv2/API_FlinkApplicationConfiguration.html)」の一部 ) を使用して、auto スケーリングの動作を有効または無効にすることができます。Managed Service for Apache Flink がプロビジョニングする KPUs に対して AWS アカウントが課金されます。これは、アプリケーションの `parallelism`および `parallelismPerKPU`設定の関数です。アクティビティが急増すると、Apache Flink 用 Managed Service のコストが増加します。

料金については、「[Amazon Managed Service for Apache Flink の料金](https://aws.amazon.com/kinesis/data-analytics/pricing/)」を参照してください。

アプリケーションのスケーリングについて、以下のことに注意してください：
+ 自動スケーリングはデフォルトで有効になっている。
+ Studio ノートブックにはスケーリングは適用されません。ただし、Studio Notebook を永続的状態のアプリケーションとしてデプロイすると、スケーリングはデプロイされたアプリケーションに適用されます。
+ 使用しているアプリケーションのデフォルトの上限は 64 KPU です。詳細については、「[Managed Service for Apache Flink および Studio ノートブッククォータ](limits.md)」を参照してください。
+ 自動スケーリングによってアプリケーションの並列度が更新されると、アプリケーションのダウンタイムが発生します。このダウンタイムを回避するには、以下を実行します。
  + 自動スケーリングを無効にする
  + 「[UpdateApplication](https://docs.aws.amazon.com/managed-flink/latest/apiv2/API_UpdateApplication.html)」アクションを使用してアプリケーションの `parallelism` および `parallelismPerKPU` を設定します。使用しているアプリケーションの並列処理の設定の詳細については、「[アプリケーションの並列処理を更新する](how-scaling.md#how-scaling-howto)」を参照してください。
  + アプリケーションのリソース使用状況を定期的に監視して、アプリケーションがワークロードに適した並列度設定になっていることを確認してください。割り当てリソースの使用状況を監視する方法については、[Managed Service for Apache Flink でのメトリクスおよびディメンション](metrics-dimensions.md) を参照してください。

## カスタムの自動スケーリングを実装する
<a name="how-scaling-custom-autoscaling"></a>

自動スケーリングをよりきめ細かく制御したり、`containerCPUUtilization` 以外のトリガーメトリクスを使用したりする場合は、次の例を参考にしてください。
+ [AutoScaling](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/infrastructure/AutoScaling)

  この例は、ソースまたはシンクとして使用される Amazon MSK および Amazon Kinesis Data Streams のメトリクスなど、Apache Flink アプリケーションとは異なる CloudWatch メトリクスを使用して Managed Service for Apache Flink アプリケーションをスケールする方法を示します。

追加情報については、「[Enhanced monitoring and automatic scaling for Apache Flink](https://aws.amazon.com/blogs/big-data/enhanced-monitoring-and-automatic-scaling-for-apache-flink/)」を参照してください。

## スケジュールされた自動スケーリングを実装する
<a name="how-scaling-scheduled-autoscaling"></a>

ワークロードが時間の経過に合わせて予測可能なプロファイルに従う場合は、Apache Flink アプリケーションを事前にスケールすることをお勧めします。これにより、メトリクスに基づいて事後にスケーリングするのではなく、スケジュールされた時間にアプリケーションがスケーリングされます。1 日の特定の時間にスケールアップとスケールダウンを設定するには、次の例を参考にしてください。
+ [ScheduledScaling](https://github.com/aws-samples/amazon-managed-service-for-apache-flink-examples/tree/main/infrastructure/ScheduledScaling)

## 最大並列度に関する考慮事項
<a name="how-scaling-auto-max-parallelism"></a>

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

オペレーターのデフォルト `maxParallelism` の計算方法とデフォルトを上書きする方法については、Apache Flink ドキュメントの「[Setting the Maximum Parallelism](https://nightlies.apache.org/flink/flink-docs-release-1.19/docs/dev/datastream/execution/parallel/#setting-the-maximum-parallelism)」を参照してください。

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

**注記**  
ジョブの最大並列処理数は、状態を保持しているアプリケーションをスケールする際の並列処理数の上限です。  
既存のアプリケーションの `maxParallelism` を変更すると、アプリケーションは従来の `maxParallelism` で作成された以前のスナップショットから再起動できなくなります。アプリケーションはスナップショットなしでしか再起動できません。  
アプリケーションを 128 を超える並列処理にスケールする場合は、アプリケーションで `maxParallelism` を明示的に設定する必要があります。
+ 自動スケーリングロジックは、ジョブの最大並列処理数を超える並列処理数にまで Flink ジョブをスケールすることを防ぎます。
+ カスタムの自動スケーリングまたはスケジュールされたスケーリングを使用する場合は、ジョブの最大並列処理数を超えないように設定します。
+ 最大並列処理数を超えてアプリケーションを手動でスケールすると、アプリケーションの起動に失敗します。