Amazon Managed Service for Apache Flink (Amazon MSF) は、以前は Amazon Kinesis Data Analytics for Apache Flink と呼ばれていました。
Managed Service for Apache Flink アプリケーションの本番環境の準備を整える
これは、Apache Flink 用 Managed Service でプロダクションアプリケーションを実行する上で重要な点をまとめたものです。これはすべてを網羅しているわけではなく、アプリケーションを本番環境に投入する前に注意すべき最低限のことをまとめたものです。
アプリケーションに負荷テストを行う
アプリケーションの問題の中には、高負荷時にのみ顕在化するものがあります。アプリケーションが問題なく稼働しているように見えても、運用上のイベントが発生すると負荷が大きく増幅されるケースがありました。これは、アプリケーション自体とは完全に独立して発生する可能性があります。データソースやデータシンクが数時間利用できない場合、Flink アプリケーションは処理を進められません。問題が解決されると、今度は蓄積されていた未処理データのバックログが利用可能なリソースを完全に使い果たしてしまう可能性があります。その負荷は、これまで顕在化していなかったバグやパフォーマンスの問題を増幅させる可能性があります。
そのため、本番環境のアプリケーションに対して適切な負荷テストを実施することが不可欠です。これらの負荷テストでは、回答すべき質問は次のとおりです。
継続的な高負荷の下でアプリケーションは安定していますか?
負荷がピークに達しても、アプリケーションはセーブポイントを取ることができますか?
1 時間のバックログ処理にはどれくらい時間がかかりますか? また、(ストリーム内のデータの最大保持期間にもよるが)24 時間ではどれくらいかかりますか?
アプリケーションが拡張されると、アプリケーションのスループットは向上しますか?
データストリームから消費する場合、これらのシナリオは、一定時間ストリームに生成することでシミュレートすることができます。次に、アプリケーションを起動し、最初からデータを消費させます。例えば、Kinesis データストリームの場合は、開始位置として TRIM_HORIZON を使用します。
最大並列度を定義する
最大並列度は、ステートフルアプリケーションが拡張できる最大並列度を定義します。これはステートが最初に作成されたときに定義され、ステートを破棄せずにこの最大値を超えてオペレータをスケールする方法はありません。
最大並列度は、ステートが最初に作成されたときに設定されます。
デフォルトでは、最大並列度は次のように設定されています。
128 (並列度が 128 未満の場合)
MIN(nextPowerOfTwo(parallelism + (parallelism / 2)), 2^15):(並列度が 128 を超える場合)
アプリケーションの並列度を 128 超にスケールする場合は、最大並列度を明示的に定義する必要があります。
最大並列度は、アプリケーションレベルで、env.setMaxParallelism(x) または 1 つのオペレータを使用して定義することもできます。特に指定がない限り、すべてのオペレータはアプリケーションの最大並列度を継承します。
詳細については、「Apache Flink ドキュメント」の「Setting the Maximum Parallelism
すべてのオペレータに UUID を設定
UUID は、Flink がセーブポイントを 1 つのオペレータにマッピングする操作に使用されます。各オペレータに特定の UUID を設定すると、リストアするセーブポイントプロセスのために安定したマッピングを与えることができます。
.map(...).uid("my-map-function")
詳細については、「プロダクション・レディネスのチェックリスト