あるモバイルゲーム会社は、ゲーム内のプレイヤーイベントデータをリアルタイムに収集しています。データストリームには毎秒約5,000件のイベントが流入し、各イベントにはplayer_idとplayer_tier(Bronze/Silver/Gold/Platinum)というフィールドが含まれています。 以下の要件があります。 ・Amazon S3にイベントデータを year/month/day/hour/player_tier の階層でパーティショニングして保存すること ・保存処理のコードを独自に記述・管理する運用負荷を最小限にすること ・データはほぼリアルタイムにS3へ書き込まれること この要件を最もよく満たすソリューションはどれですか?
Amazon Data Firehoseの動的パーティショニングは、ストリームレコード内のフィールド値を基にS3への書き込みプレフィックスをリアルタイムに動的決定できるマネージド機能です。jq式でplayer_tierを抽出し、S3プレフィックス(例:`player_tier=!{partitionKeyFromQuery:player_tier}/year=!{timestamp:yyyy}/month=!{timestamp:MM}/...`)に組み込むことで、独自コードを書かずにパーティショニングが実現し、運用負荷を最小化できます。 選択肢AのKinesis Data Streams + Lambdaは機能的には可能ですが、コンシューマーのスケーリング・エラーハンドリング・S3書き込みロジックをすべて自前で実装・管理する必要があり、運用負荷が大きくなります。 選択肢CのMSK + MSK ConnectはApache Kafkaエコシステムとの統合に適していますが、新規構築でのリアルタイムS3取り込みではFirehoseと比較して設定・管理コストが高くなります。 選択肢DのFirehose + Glue再パーティショニングは処理が二段階になりほぼリアルタイムの要件を満たせず、コストも二重に発生します。