1 前言

Spring Cloud Data Flow 是什麼,雖然已經出現一段時間了,但想必很多人不知道,因爲在項目中很少有人用。不僅找不到很多中文資料,英文資料也一樣少的可憐。這讓探索的路更加艱辛,也更加有趣吧。

Spring Cloud Data Flow 是基於微服務的,專門用於流式和批式數據處理的框架。

2 基本概念

2.1 數據處理模式

數據處理有兩種模式,分別是 Streaming流式處理Batch批次處理Streaming 是長時間一直存在的,你數據來了我就處理,沒來我就等着,基於消息驅動。 Batch 是處理時間較短的,啓動一次處理一次,處理完就退出任務,需要去觸發任務。

一般地,我們會基於 Spring Cloud Stream 框架來開發 Streaming 應用,而基於 Spring Cloud TaskSpring Batch 框架來開發 Batch 應用。完成開發後,可以打包成兩種形式:

  • (1) Springboot 式的 jar 包,可以放在 maven 倉庫、文件目錄或 HTTP 服務上;
  • (2) Docker 鏡像。

對於 Stream ,有三個概念是需要理解的:

  • (1) Source :消息生產者,負責把消息發送到某個目標;
  • (2) Sink :消息消費者,負責從某個目標讀取消息;
  • (3) Processor :聯合 SourceSink ,它從某個目標消費消息,然後發送到另一個目標。

2.2 特性

Spring Cloud Data Flow 有許多好的特性值得我們學去使用它:

  • 基於雲的架構,可部署在 Cloud FoundryKubernetesOpenShift 等。

  • 有許多可選擇的開箱即用的流處理和批處理應用組件。

  • 可自定義應用組件,且是基於 Springboot 風格的編程模型。

  • 有簡單靈活的 DSL(Domain Specific Language) 去定義任務處理邏輯。

  • 有美觀的 Dashboard 能可視化地定義處理邏輯、管理應用、管理任務等。

  • 提供了 REST API ,可以在 shell 命令行模式下進行交互。

2.3 服務端組件

服務端有兩個重要的組件: Data Flow ServerSkipper Server 。兩者作用不同,互相協作。

Data Flow Server 的主要作用有:

  • 解析 DSL
  • 校驗和持久化 StreamTaskBatch 的定義;
  • 註冊應用如 jar 包應用和 docker 應用;
  • 部署 Batch 到一個或多個平臺;
  • 查詢 JobBatch 的歷史執行記錄;
  • Stream 的配置管理;
  • 分發 Stream 部署到 Skipper

Skipper Server 主要作用有:

Stream
Stream
Stream

可以看出,如果不需要使用 Stream ,可以不用部署 Skipper 。兩者都需要依賴關係型數據庫( RDBMS ),默認會使用內置的 H2 ,支持的數據庫有 H2HSQLDBMYSQLOraclePostgreSqlDB2SqlServer

2.4 運行環境

優秀的 Spring 的解耦能力總是特別強, Server 和應用可以運行在不同的平臺。我們可以把 Data Flow ServerSkipper Server 部署在 LocalCloud FoundryKuernetes ,而 Server 又可以把應用部署在不同的平臺。

  • 服務端Local:應用Local/Cloud Foundry/Kuernetes;
  • 服務端Cloud Foundry:應用Cloud Foundry/Kuernetes;
  • 服務端Kuernetes:應用Cloud Foundry/Kuernetes。

一般情況下,我們會把 Server 和應用部署在同一平臺上。對於生產環境,建議還是在 Kuernetes 上比較合適。

3 本地模式安裝使用

爲了快速體驗,我們使用最簡單的本地運行環境。

3.1 下載Jar包

下載以下三個 jar 包:

wget https://repo.spring.io/release/org/springframework/cloud/spring-cloud-dataflow-server/2.5.3.RELEASE/spring-cloud-dataflow-server-2.5.3.RELEASE.jar
wget https://repo.spring.io/release/org/springframework/cloud/spring-cloud-dataflow-shell/2.5.3.RELEASE/spring-cloud-dataflow-shell-2.5.3.RELEASE.jar
wget https://repo.spring.io/release/org/springframework/cloud/spring-cloud-skipper-server/2.4.3.RELEASE/spring-cloud-skipper-server-2.4.3.RELEASE.jar

如果是簡單的 Batch 應用,可以只下載 spring-cloud-dataflow-server-2.5.3.RELEASE.jar

3.2 啓動應用

# 啓動Skipper,默認端口爲7577
java -jar spring-cloud-skipper-server-2.4.3.RELEASE.jar
# 啓動Data Flow Server,默認端口爲9393
java -jar spring-cloud-dataflow-server-2.5.3.RELEASE.jar

啓動完成後,訪問UI: http://localhost:9393/dashboard

3.3 部署應用

3.3.1 添加應用Applications

只有添加了應用,才能部署 BatchStream 。官方提供了示例 Applications ,我們直接使用就可以了:

添加成功後,在應用列表可以查看:

3.3.2 創建Task

創建 Task 可以圖形化創建,也可以通過 DSL 來創建,非常方便:

定義好 Task 後,輸入名字創建:

3.3.3 運行Task

直接點擊運行:

可以傳入參數:

3.3.4 查看Task運行情況

可以查看運行日誌:

3.4 Data Flow Shell命令行

除了在網頁上,還可以通過命令行模式來與 Server 進行交互。

啓動應用:

$ java -jar spring-cloud-dataflow-shell-2.5.3.RELEASE.jar 
  ____                              ____ _                __
 / ___| _ __  _ __(_)_ __   __ _   / ___| | ___  _   _  __| |
 \___ \| '_ \| '__| | '_ \ / _` | | |   | |/ _ \| | | |/ _` |
  ___) | |_) | |  | | | | | (_| | | |___| | (_) | |_| | (_| |
 |____/| .__/|_|  |_|_| |_|\__, |  \____|_|\___/ \__,_|\__,_|
  ____ |_|    _          __|___/                 __________
 |  _ \  __ _| |_ __ _  |  ___| | _____      __  \ \ \ \ \ \
 | | | |/ _` | __/ _` | | |_  | |/ _ \ \ /\ / /   \ \ \ \ \ \
 | |_| | (_| | || (_| | |  _| | | (_) \ V  V /    / / / / / /
 |____/ \__,_|\__\__,_| |_|   |_|\___/ \_/\_/    /_/_/_/_/_/

2.5.3.RELEASE

Welcome to the Spring Cloud Data Flow shell. For assistance hit TAB or type "help".
Successfully targeted http://localhost:9393/

dataflow:>app list
╔═══╤══════╤═════════╤════╤════════════════════╗
║app│source│processor│sink│        task        ║
╠═══╪══════╪═════════╪════╪════════════════════╣
║   │      │         │    │composed-task-runner║
║   │      │         │    │timestamp-batch     ║
║   │      │         │    │timestamp           ║
╚═══╧══════╧═════════╧════╧════════════════════╝

dataflow:>

4 總結

本文使用的是官方提供的應用,我們可以自己開發應用並註冊到 Server 上。 Local 模式適合開發環境適合,生產環境還是部署在 Kubernetes 比較靠譜。後面我們再來探索吧。

參考官方資料:

概述

概念

本地模式安裝

歡迎關注微信公衆號< 南瓜慢說 >,將持續爲你更新...

相關文章