【正解】B
【0からの解説】
①前提知識:Pub/Sub はメッセージを非同期にやり取りするフルマネージドのメッセージング サービスで、リアルタイムのイベント データの受け口としてよく使われます。Dataflow(Apache Beam ベースのフルマネージド データ処理サービス)はストリーミング処理に対応しており、Pub/Sub からの読み取り、フィルタリング・エンリッチメント(他データとの結合など)・ウィンドウ集計といった変換、BigQuery への書き込み(Storage Write API などのストリーミング書き込み)を 1 つのパイプラインで実行できます。オートスケーリング、1 回限りの処理(exactly-once)、遅延データの扱いなどの仕組みを備えています。「Pub/Sub → Dataflow → BigQuery」は Google がストリーミング分析の参照構成として推奨する組み合わせです。
②要件の整理:「リアルタイムのストリーミング データ(Pub/Sub)」「フィルタリング・エンリッチメント・集計という変換が必要」「パーティション分割テーブルへの読み込み」「低レイテンシかつ高スループット」「Google 推奨」です。
③正解の理由:Dataflow のストリーミング パイプラインは、変換を含む継続的な処理を低レイテンシで行い、データ量に応じて自動でスケールするため高スループットにも対応できます。サーバー管理も不要で、すべての要件を満たします。なお、変換が不要で Pub/Sub のメッセージをそのまま BigQuery に入れるだけなら BigQuery サブスクリプションも選択肢になりますが、本問のように集計やエンリッチメントが必要な場合は Dataflow が適しています。
【誤りの選択肢】
A:Cloud Composer(現 Managed Service for Apache Airflow)はワークフローのスケジュール実行とオーケストレーション(タスクの順序制御)のためのサービスで、それ自体はストリーミング データを継続的に処理するエンジンではありません。DAG をバッチ的に定期実行する形になるため、低レイテンシの要件を満たせません。
C:Dataproc(現 Managed Service for Apache Spark)の Spark Streaming でも同様の処理は実装できますが、クラスタの作成・サイジング・スケーリング・運用を自分で管理する必要があります。既存の Spark 資産の移行などの理由がない限り、フルマネージドでサーバーレスな Dataflow のほうが Google 推奨の構成です。
D:Cloud Run functions(旧 Cloud Functions)はメッセージ単位でのシンプルな処理には使えますが、複数のメッセージにまたがる集計(ウィンドウ処理)や状態の保持、高スループット時の効率的なバッチ書き込みが苦手で、同時実行数やタイムアウトの制約もあります。集計を含む大量のストリーミング処理には適しません。
【参考】
Pub/Sub から Dataflow に読み取るストリーミング パイプライン | Cloud DataflowPub/Sub を BigQuery で使用する