Java SDKを使ったApache Beamのパイプライン構築については公式ドキュメントなどを見るとMavenを使うことが多いのですが、Gradleを使った例が見当たらなかったので作ってみました。
個人的な感想なのですが、Mavenだと依存関係をpomで定義書くのが辛かったのですが、Gradleのほうが素直に書けてそこだけでもGradleを使うメリットはあるかなあと思っています。
Gradle経由でDataflowにdeployする定義も作っています。
apache-beam-gradle-sample/build.gradle at main · SpringMT/apache-beam-gradle-sample · GitHub
サンプルプロジェクト構成について
pipeline
パイプラインの構築だけに責務があります。
pipelineの中には具体的な処理内容は書かず、エントリーポイントと処理を担当するクラス(ステージ)を定義するだけにしています。
transform
PTransform
を使い、具体的な処理内容を書きます。
ステージに相当する部分となります。
単一責任の原則に則り1クラス1処理とし、できる限り単体テストを書くようにします。
ステージを跨ぐ場合は、 PCollection
を使ってデータを受け渡しを行います。
application
アプリケーションロジックなどをここにまとめます。
ステージを跨ぐデータのクラスを置いたりしています。