Spring Cloud Data Flow とは
Spring Cloud Data Flow は、データ連携やリアルタイムデータ処理のパイプラインを構築するためのツールキットです。ストリーム処理やバッチ処理を、GUI やコマンドから宣言的に組み立てられます。
ここでは、ローカルの minikube 上に Helm を使って Spring Cloud Data Flow(SCDF)を構築します。
前提環境
クラスタの起動
SCDF は複数のコンポーネント(サーバー、MySQL、RabbitMQ など)を同時に動かすため、デフォルトの 2GB では足りません。4GB 以上 を割り当てて minikube を起動します。
minikube start --memory 4096
Helm でのインストール
Helm のバージョンによって手順が異なります。LoadBalancer は minikube では使えないため、サービスタイプを NodePort に変更する点が共通のポイントです。
Helm 2 系の場合
# minikube に Helm のサーバー(tiller)を初期化
helm init
helm install --name my-release \
--set server.service.type=NodePort \
stable/spring-cloud-data-flow
Helm 3 系の場合
helm repo add stable https://kubernetes-charts.storage.googleapis.com/
helm install my-release \
--set server.service.type=NodePort \
stable/spring-cloud-data-flow
起動の確認
以下のコンポーネントが立ち上がります。
- mysql — アプリケーションレジストリやストリーム/タスクのリポジトリを保持する RDBMS
- rabbitmq — メッセージングミドルウェア
- server — SCDF 本体のサーバー
- skipper — アプリのライフサイクル管理を担うコンポーネント
すべての Pod が Running になれば準備完了です。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
my-release-data-flow-server-96fccf48c-992mn 1/1 Running 0 105m
my-release-data-flow-skipper-6c584bb9d-s5pxv 1/1 Running 0 105m
my-release-mysql-85bfd59986-jgsqg 1/1 Running 0 105m
my-release-rabbitmq-5657497d7c-ljwms 1/1 Running 0 105m
GUI へのアクセス
アクセス URL は http://<minikube の IP>:<サーバーの NodePort>/dashboard の形になります。IP とポートを個別に調べてもよいのですが、minikube には URL を組み立ててくれる便利なコマンドがあります。
# サービスの URL を取得
$ minikube service --url my-release-data-flow-server
http://192.168.99.102:30553
# デフォルトブラウザでダッシュボードを開く
$ open $(minikube service --url my-release-data-flow-server)/dashboard

デモ:ストリームを作る
1. アプリの登録
まず、利用するストリーム/タスク用アプリをまとめて登録します。
wget -qO- "$(minikube service --url my-release-data-flow-server)/apps" \
--post-data="uri=https://dataflow.spring.io/rabbitmq-docker-latest&force=true"
echo "Stream apps imported"
wget -qO- "$(minikube service --url my-release-data-flow-server)/apps" \
--post-data="uri=https://dataflow.spring.io/task-docker-latest&force=true"
echo "Task apps imported"
2. ストリームの作成
公式デモにならって、time | log(時刻を生成してログに流す)という定番のストリームを作成します。

デプロイすると、ストリームを構成するアプリが Deployment として増えていることを確認できます。
$ kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE
my-release-data-flow-server 1/1 1 1 19h
my-release-data-flow-skipper 1/1 1 1 19h
my-release-mysql 1/1 1 1 19h
my-release-rabbitmq 1/1 1 1 19h
ticktock-log-v1 1/1 1 1 2m17s
ticktock-time-v1 1/1 1 1 2m17s