Dataflow は、統合されたストリーム データ処理とバッチデータ処理を大規模に提供する Google Cloud サービスです。Dataflow を使用して、1 つ以上のソースからデータを読み取り、変換し、宛先に書き込むデータ パイプラインを作成します。
Dataflow の一般的なユースケースは次のとおりです。
- データの移動: データの取り込みやサブシステム間でのデータの複製
- BigQuery などのデータ ウェアハウスにデータを取り込む ETL(抽出、変換、読み込み)ワークフロー。
- BI ダッシュボードの強化。
- ストリーミング データへの ML のリアルタイム適用。
- センサーデータまたはログデータの大規模な処理。
Dataflow は、バッチ分析とストリーム分析の両方に同じプログラミング モデルを使用します。ストリーミング パイプラインにより、非常に低いレイテンシを実現できます。量が変動するリアルタイム データを取り込んで処理し、分析できます。デフォルトでは、Dataflow はすべてのレコードに対して 1 回限りの処理を保証します。重複を許容できるストリーミング パイプラインの場合、多くの場合、1 回以上モードを有効にすることでコストを削減し、レイテンシを改善できます。
Dataflow の利点
このセクションでは、Dataflow を使用するメリットについて説明します。
マネージド
Dataflow はフルマネージド サービスです。つまり、Dataflow の実行に必要なすべてのリソースが Google によって管理されます。Dataflow ジョブを実行すると、Dataflow サービスはパイプラインを実行するワーカー VM のプールを割り当てます。これらの VM をプロビジョニングまたは管理する必要はありません。ジョブが完了するかキャンセルされると、Dataflow は VM を自動的に削除します。ジョブで使用したコンピューティング リソースに対して課金されます。費用の詳細については、Dataflow の料金をご覧ください。
スケーラブル
Dataflow は、大規模なバッチ パイプラインとストリーミング パイプラインをサポートするように設計されています。データは並列で処理されるため、その作業は複数の VM に分散されます。
Dataflow は自動スケーリングを行います。追加のワーカー VM をプロビジョニングしたり、より少数で十分な場合は一部のワーカー VM をシャットダウンします。また、パイプラインの特性に応じて作業を最適化します。たとえば、Dataflow は VM 間で作業を動的に再調整し、並列処理が効率的に完了するようにします。
ポータブル
Dataflow は、オープンソースの Apache Beam プロジェクトで構築されています。Apache Beam では、言語固有の SDK を使用してパイプラインを作成できます。Apache Beam は Java、Python、Go SDK、多言語パイプラインをサポートしています。
Dataflow は、Apache Beam パイプラインを実行します。今後 Apache Flink や Apache Spark などの別のプラットフォームでパイプラインを実行する場合は、パイプライン コードを書き換えることなく実行できます。
柔軟
Dataflow は、データの移動など、比較的単純なパイプラインに使用できます。また、リアルタイム ストリーミング分析など、より高度なアプリケーションにも適しています。バッチからストリーミングに移行する場合や、より高度なユースケースが発生した場合、Dataflow 上に構築されたソリューションをニーズに合わせて拡張できます。
Dataflow は、ニーズに応じてパイプラインを作成して実行するために、いくつかの方法をサポートしています。
Apache Beam SDK を使用してコードを記述する。
Dataflow テンプレートをデプロイする。テンプレートでは、事前定義されたパイプラインを実行できます。たとえば、デベロッパーがテンプレートを作成して、データ サイエンティストがそれをオンデマンドでデプロイできます。
また、一般的なシナリオ用にテンプレートのライブラリも用意されています。これらのテンプレートは、Apache Beam のプログラミングの知識がなくてもデプロイできます。
JupyterLab ノートブックを使用して、パイプラインの開発と実行の反復処理を行う。
オブザーバビリティ
Dataflow ジョブのステータスは、Google Cloud コンソールの Dataflow モニタリング インターフェースを使用してモニタリングできます。モニタリング インターフェースには、パイプラインがグラフィカルに表現され、各パイプライン ステージの進行状況と実行の詳細が表示されます。モニタリング インターフェースでは、ボトルネックや高レイテンシなどの問題を簡単に見つけることができます。Dataflow ジョブをプロファイリングして、CPU 使用率とメモリ割り当てをモニタリングすることもできます。
仕組み
Dataflow では、データが一連のステージを通過するデータ パイプライン モデルが使用されます。ステージでは、ソースからのデータの読み取り、データの変換と集計、結果の宛先への書き込みなどが行われます。
パイプラインは、非常に単純なものからより複雑なものまで、多岐にわたります。たとえば、パイプラインは次の処理を行います。
- データをそのまま宛先に移動する。
- ターゲット システムで使いやすいようにデータを変換する。
- 分析用にデータを集計、処理、拡充する。
- データを他のデータと結合する。
Apache Beam で定義されたパイプラインでは、パイプラインの実行方法が指定されていません。パイプラインの実行はランナーの仕事です。ランナーの目的は、特定のプラットフォームで Apache Beam パイプラインを実行することです。Apache Beam は、Dataflow ランナーを含む複数のランナーをサポートしています。
Dataflow を Apache Beam パイプラインで使用するには、Dataflow ランナーを指定します。ランナーは、実行可能コードと依存関係を Cloud Storage バケットにアップロードし、Dataflow ジョブを作成します。Dataflow は、パイプラインを実行する VM のプールを割り当てます。
次の図は、Dataflow と他の Google Cloud サービスを使用した一般的な ETL と BI ソリューションを示しています。
この図は次のステージを示しています。
- Pub/Sub が外部システムからデータを取り込む。
- Dataflow が Pub/Sub からデータを読み取り、BigQuery に書き込む。このステージで、Dataflow はデータを変換または集計することがあります。
- データ アナリストがデータに対してアドホック クエリを実行できるように、BigQuery がデータ ウェアハウスとして機能する。
- Looker が BigQuery に保存されたデータから、リアルタイムの BI 分析情報を提供する。
基本的なデータ移動のシナリオでは、Google 提供のテンプレートを実行できます。一部のテンプレートは、JavaScript で記述されたユーザー定義関数(UDF)をサポートしています。UDF を使用すると、テンプレートにカスタム処理ロジックを追加できます。より複雑なパイプラインの場合は、Apache Beam SDK を使用してください。
次のステップ
- Apache Beam の詳細を確認する。Apache Beam のプログラミング モデルをご覧ください。
- Apache Beam SDK をインストールする。
- Java クイックスタート、Python クイックスタート、または Go クイックスタートの説明に従って、最初のパイプラインを作成する。
- Dataflow テンプレートについて学習する。Dataflow テンプレートを使用してストリーミング パイプラインを作成するをご覧ください。