Amazon Managed Service for Apache Flink

Apache Flink をフルマネージドで実行し、Kinesis Data Streams や MSK からのリアルタイムストリームデータを低レイテンシで処理・分析するサービス

概要

Amazon Managed Service for Apache Flink (旧 Kinesis Data Analytics) は、Apache Flink アプリケーションをフルマネージドで実行するストリーム処理サービスです。Java、Scala、Python で記述した Flink アプリケーションをデプロイするだけで、クラスターのプロビジョニング、スケーリング、パッチ適用、チェックポイント管理が自動化されます。Kinesis Data Streams、Amazon MSK、S3 をソースおよびシンクとして使用し、ミリ秒単位のレイテンシでイベントを処理します。

Flink アプリケーションのデプロイとスケーリング

Managed Flink にアプリケーションをデプロイするには、Flink アプリケーションの JAR ファイルまたは ZIP アーカイブを S3 にアップロードし、アプリケーション設定でエントリポイントクラスとランタイム環境を指定します。Apache Flink Studio を使えば、Apache Zeppelin ノートブック上でインタラクティブに SQL クエリを実行し、ストリームデータをリアルタイムで探索・分析することも可能です。スケーリングは KPU (Kinesis Processing Unit) 単位で行われ、1 KPU は 1 vCPU と 4 GB メモリに相当します。Auto Scaling を有効にすると、入力データのスループットに応じて KPU 数が自動的に増減します。スケールアウト時はアプリケーションのスナップショットが取得され、新しい並列度でステートが復元されるため、データの欠損なくスケーリングが完了します。並列度 (Parallelism) と KPU あたりの並列度 (ParallelismPerKPU) の設定がパフォーマンスチューニングの鍵で、ソースのシャード数やパーティション数に合わせて調整します。

チェックポイントと状態管理

Flink のステートフル処理では、ウィンドウ集約やセッション管理などの中間状態をアプリケーション内に保持します。Managed Flink はこの状態を定期的にチェックポイントとして S3 に永続化し、障害発生時にチェックポイントから状態を復元して処理を再開します。チェックポイント間隔はデフォルト 60 秒で、レイテンシ要件に応じて短縮できますが、間隔を短くするとチェックポイントの I/O オーバーヘッドが増加します。状態バックエンドは RocksDB (ディスクベース) がデフォルトで、大規模な状態 (数 GB 以上) を効率的に管理できます。状態サイズが小さい場合は HashMapStateBackend (メモリベース) に切り替えることでレイテンシを改善できます。セーブポイントはユーザーが明示的に取得するスナップショットで、アプリケーションのアップグレードやロジック変更時に状態を引き継ぐために使用します。Managed Flink ではスナップショット API でセーブポイントを取得し、新バージョンのアプリケーションをセーブポイントから起動することで、ステートフルなアプリケーションのゼロダウンタイムアップグレードが実現します。

Kinesis・MSK とのソース・シンク統合

Managed Flink の入力ソースとして最も一般的なのは Kinesis Data Streams と Amazon MSK (Managed Streaming for Apache Kafka) です。Kinesis ソースでは、Flink の Kinesis Consumer がシャードごとにデータを並列に読み取り、シャード数と Flink の並列度を一致させることで最大スループットを実現します。MSK ソースでは、Flink の Kafka Consumer がトピックのパーティションからデータを読み取ります。MSK の IAM 認証に対応しており、アクセスキーの管理が不要です。シンク (出力先) としては、S3 (Parquet/JSON 形式でのバッチ書き込み)、Kinesis Data Streams、MSK、OpenSearch、DynamoDBRDS が利用可能です。S3 シンクでは、Flink のバケッティング機能で時間やキーに基づいてファイルを分割し、下流の Athena クエリでパーティションプルーニングが効くようにデータを配置します。ウォーターマーク戦略の設定はイベントタイム処理の精度に直結し、遅延データの許容範囲 (Allowed Lateness) を適切に設定しないと、ウィンドウの計算結果が不正確になります。

共有するXB!