

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

# パフォーマンスに関するベストプラクティスを使用する
<a name="performance-improving"></a>

このセクションでは、パフォーマンスを考慮したアプリケーションの設計に関する特別な考慮事項について説明します。

## スケーリングを適切に管理する
<a name="performance-improving-scaling"></a>

このセクションには、アプリケーションレベルとオペレーターレベルのスケーリングの管理に関する情報が含まれています。

**Topics**
+ [アプリケーションのスケーリングの適切な管理](#performance-improving-scaling-app)
+ [オペレータースケーリングの適切な管理](#performance-improving-scaling-op)

### アプリケーションのスケーリングの適切な管理
<a name="performance-improving-scaling-app"></a>

自動スケーリングを使用すると、アプリケーションアクティビティの予期しない急増に対処できます。アプリケーションのKPUは、以下の基準を満たしている場合、自動的に増加します。
+ アプリケーションの自動スケーリングが有効になっている。
+ CPU 使用率が 75 ％以上の状態が 15 分間続く。

自動スケーリングが有効になっていても CPU 使用率がこのしきい値を維持しない場合、アプリケーションは KPU をスケールアップしません。このしきい値を満たさないCPU使用率の急増や、 `heapMemoryUtilization` などの別の使用率指標の急増が発生した場合は、アプリケーションがアクティビティ急増を処理できるように、手動でスケーリングを増やします。

**注記**  
アプリケーションが自動スケーリングによってリソースを自動的に追加した場合、アプリケーションはしばらくアクティブになっていないときに新しいリソースを解放します。リソースをダウンスケーリングすると、一時的にパフォーマンスに影響します。

(スケーリングの詳細については、 [アプリケーションスケーリングを実装する](how-scaling.md) を参照してください。)

### オペレータースケーリングの適切な管理
<a name="performance-improving-scaling-op"></a>

アプリケーションのワークロードがワーカープロセスに均等に分散されていることと、アプリケーション内のオペレーターが安定してパフォーマンスを発揮するために必要なシステムリソースを持っていることを確認することで、アプリケーションのパフォーマンスを向上させることができます。

`parallelism` 設定を使用して、アプリケーションのコード内の各オペレータの並列度を設定できます。オペレータに並列度を設定しない場合、アプリケーションレベルの並列度設定が使用されます。アプリケーションレベルの並列度設定を使用するオペレータは、アプリケーションで使用可能なすべてのシステムリソースを消費し、アプリケーションが不安定になる可能性があります。

各オペレータの並列度を最も適切に判断するには、アプリケーション内の他のオペレータと比較したオペレータの相対的なリソース要件を考慮します。リソースを大量に消費するオペレータには、リソースをあまり消費しないオペレータよりも高いオペレータ並列度を設定します。

アプリケーションのオペレータ並列度の合計は、アプリケーション内のすべてのオペレータの並列度の合計です。アプリケーションで使用可能なタスクスロットの合計との最適な比率を決定して、アプリケーションのオペレータ並列度全体を調整します。オペレータの総並列度とタスクタイムスロットの一般的な安定比は 4:1 です。つまり、アプリケーションが使用可能なオペレータサブタスクの4つごとに1つのタスクタイムスロットがあります。リソースを大量に消費するオペレータを使用するアプリケーションには 3:1 または 2:1 の比率が必要ですが、リソース集約度の低いオペレータを使用するアプリケーションでは 10:1 の比率で安定している場合があります。

オペレータの比率は [ランタイムプロパティを使用する](how-properties.md) を使用して設定できるため、アプリケーションコードをコンパイルしてアップロードしなくてもオペレータの並列度を調整できます。

以下のコード例は、オペレータの並列度を現在のアプリケーションの並列度に対する調整可能な比率として設定する方法を示しています。

```
Map<String, Properties> applicationProperties = KinesisAnalyticsRuntime.getApplicationProperties();
operatorParallelism = 
    StreamExecutionEnvironment.getParallelism() / 
    Integer.getInteger(
        applicationProperties.get("OperatorProperties").getProperty("MyOperatorParallelismRatio")
    );
```

サブタスク、タスクスロット、その他のアプリケーションリソースについては、 [Managed Service for Apache Flink アプリケーションリソースを確認する](how-resources.md) を参照してください。

アプリケーションのワーカープロセス全体にわたるワークロードの分散を制御するには、`Parallelism` 設定と `KeyBy` パーティションメソッドを使用します。詳細については、「[Apache Flink ドキュメント](https://ci.apache.org/projects/flink/flink-docs-release-1.8/)」の以下のトピックを参照してください。
+ [同時実行](https://ci.apache.org/projects/flink/flink-docs-stable/dev/parallel.html)
+ 「[データストリーム変換](https://ci.apache.org/projects/flink/flink-docs-stable/dev/stream/operators/#datastream-transformations)」

## 外部依存リソースの使用状況を監視します。
<a name="performance-improving-destinations"></a>

デスティネーション (Kinesis Streams、Firehose、DynamoDB、OpenSearch Service など) にパフォーマンスのボトルネックがあると、アプリケーションにバックプレッシャーが発生します。外部依存関係がアプリケーションのスループットに合わせて適切にプロビジョニングされていることを確認します。

**注記**  
他のサービスに障害が発生すると、アプリケーションに障害が発生する可能性があります。アプリケーションに障害が発生している場合は、宛先サービスの CloudWatch ログに障害がないか確認します。

## Apache Flink アプリケーションをローカルで実行します。
<a name="performance-improving-local"></a>

メモリ問題をトラブルシューティングするには、アプリケーションをローカルの Flink インストールで実行できます。これにより、Apache Flink 用 Managed Service でアプリケーションを実行しているときには使用できないスタックトレースやヒープダンプなどのデバッグツールにアクセスできるようになります。

Flink のローカルインストールを作成する方法については、「Apache Flink ドキュメント」の「[Standalone](https://nightlies.apache.org/flink/flink-docs-release-1.18/docs/deployment/resource-providers/standalone/overview/)」を参照してください。