【正解】C
【0からの解説】
①前提知識
・Pub/Sub:フルマネージドなメッセージング サービスです。送信側(パブリッシャー)と受信側(サブスクライバー)を疎結合にし、毎秒数百万メッセージ規模まで自動でスケールします。
・Dataflow:Apache Beam で書いたパイプラインを実行するフルマネージドなサービスです。ストリーミング処理では、ウィンドウ処理(固定・スライディング・セッション ウィンドウ)、ウォーターマーク(イベント時刻の観点で「どこまでデータが揃ったか」の推定)、トリガー、許容遅延(allowed lateness)といった仕組みで、遅れて到着したデータを正しい時間枠に反映できます。ワーカーは自動でスケールします。
・BigQuery:サーバーレスなデータ ウェアハウスです。ストリーミング書き込みしたデータを取り込み直後から SQL で分析できます。
②問題文の要件の整理
・データは継続的に到着し、低レイテンシで処理する(=ストリーミング処理)
・セッション化(ユーザーごとのクリックを時間枠でまとめる)と集計
・毎秒数百万件のイベントに対応できるスケーラビリティ
・遅延データへの耐性
③正解の理由
Pub/Sub → Dataflow → BigQuery は、Google Cloud におけるストリーミング分析の標準的な構成です。セッション化は Apache Beam の「セッション ウィンドウ」(ユーザーごとに、一定時間クリックが途切れるまでを 1 セッションとする)でそのまま実装でき、ウォーターマークと許容遅延・トリガーにより遅延データも正しいセッションや集計に反映されます。Pub/Sub と Dataflow はいずれも自動スケールするため毎秒数百万件にも対応でき、結果を BigQuery に書き込めばすぐに分析に使えます。
【誤りの選択肢】
A:Firebase Realtime Database は、モバイル / ウェブ アプリのクライアント間でデータをリアルタイムに同期するための JSON データベースで、大量イベントの取り込み基盤や分析用ストレージではありません(1 データベースあたりの同時接続数や書き込み数に上限があります)。Cloud Run functions(旧 Cloud Functions)はイベント単位のステートレスな処理で、ウィンドウやウォーターマーク、状態管理の仕組みがないため、セッション化や遅延データの扱いを自前で実装する必要があります。
B:Cloud Data Fusion は GUI でパイプラインを構築するマネージドなデータ統合サービスで、実行基盤は Dataproc(現 Managed Service for Apache Spark)のクラスタです。主にバッチ ETL 向けで、毎秒数百万件を低レイテンシで処理し遅延データを扱う用途では Dataflow に劣ります。また Cloud SQL はトランザクション処理(OLTP)向けのリレーショナル データベースで、毎秒数百万件の書き込みや大規模な分析にはスケールしません。
D:Cloud Storage にファイルを溜めてから Dataproc(現 Managed Service for Apache Spark)でバッチ処理する構成は、処理がファイル到着後の定期実行になるため「継続的に到着するデータを低レイテンシで処理する」要件を満たしません。クラスタ管理の運用負荷もあります。
【参考】
Pub/Sub とはストリーミング パイプライン | Cloud DataflowDataflow の概要