物流会社のデータエンジニアリングチームは、荷物の追跡イベントをAmazon Kinesis Data Streamsに送信しています。「予定配達時刻と実際のスキャン時刻の差が2時間を超えた荷物」を遅延とみなし、10分間のタンブリングウィンドウ(一定時間ごとに重複なく区切る集計ウィンドウ)内で地域別の遅延件数をリアルタイム集計するダッシュボードを構築しようとしています。ソリューションはサーバーレスであり、カスタムJava/Pythonコードを書かずにSQL構文でストリーム処理を実装できることが要件です。最も適切な構成はどれですか?
正解: Amazon Managed Service for Apache Flinkを使用し、Flink SQLのTUMBLE関数でKinesis Data Streamsからデータを読み取り、10分ウィンドウ内の地域別遅延件数を集計してリアルタイムに出力する。 Amazon Managed Service for Apache Flink(旧称: Amazon Kinesis Data Analytics for Apache Flink)は、Flink SQLによるウィンドウ集計(TUMBLE・HOP・SESSION関数)をサポートするフルマネージドのサーバーレスサービスです。カスタムコードなしにSQLでイベント時刻に基づく複雑なストリーム処理を実装でき、本要件に最も適しています。 選択肢Bは、LambdaはKinesisから個別レコードを処理しますが、ネイティブなタイムウィンドウ集計機能を持たず、DynamoDBカウンターによるウィンドウ境界の管理は複雑になりスケーラビリティにも課題があります。 選択肢Cは、Firehoseはデータ配信サービスであり、リアルタイムのウィンドウ集計は行えません。Lambda変換も実行時間制限があり、集計ロジックの実装には不向きです。 選択肢Dは、GlueストリーミングはSparkマイクロバッチ処理であり、イベント時刻に基づく真のストリームウィンドウ処理ではありません。またSQL構文のウィンドウ関数もネイティブにはサポートされていません。