あるECサイトでは、毎秒2万件のユーザーアクションをAmazon Kinesis Data Streamsで受信しており、次の要件があります。①ユーザーのセッション(最後のイベントから10分間操作がない場合に終了する動的ウィンドウ)ごとにコンバージョン率を集計する。②セッション終了から30秒以内にAmazon OpenSearch Serviceへ集計結果を書き込む。③インフラのサイジングや管理を最小限にする。以下のアーキテクチャのうち、すべての要件を満たすものはどれですか?
Amazon Managed Service for Apache Flink(旧称 Kinesis Data Analytics for Apache Flink)はフルマネージドのApache Flink 実行環境を提供し、サーバーやクラスターの管理が不要です。Flink ネイティブのセッションウィンドウ(SessionWindows.withGap)は「最後のイベントから指定時間イベントがない場合にウィンドウを閉じる」動的ウィンドウをフレームワーク内部のステートで管理します。処理はイベント駆動型であり、ウィンドウが閉じた瞬間に結果が下流へ送出されます。組み込みのOpenSearch コネクタで直接書き込むことでセッション終了後ほぼ瞬時に反映でき、30秒以内の要件を確実に満たします。 選択肢BのManaged Service for Apache Flinkは、Amazon Data FirehoseのOpenSearch Service 向けデフォルトバッファリング間隔が300秒であるため、Flink 側の処理完了後にさらに300秒以上の遅延が生じ、30秒以内の要件を構造的に満たせない。 選択肢CのAWS Glue Streaming ETL(session_window 方式)は、Spark Structured Streaming の session_window 関数がウォーターマークの進行に基づきウィンドウを閉じるため、遅延許容10分の設定ではセッション終了後もウォーターマークが十分に進むまで数十分間結果が保留される可能性があり、30秒以内の要件を満たせない。 選択肢DのAWS Glue Streaming ETL(DynamoDB外部ステート方式)は、DynamoDB を外部ステートストアとしLambda が30秒間隔でポーリングする構成であり、各イベントのDynamoDB 読み書きによるレイテンシ増大と、ポーリング間隔による最大30秒の検出遅延が重なり、要件を満たせない可能性が高い。