1. 程式人生 > 實用技巧 >Spring Cloud Data Flow初體驗,以Local模式執行

Spring Cloud Data Flow初體驗,以Local模式執行

1 前言

歡迎訪問南瓜慢說 www.pkslow.com獲取更多精彩文章!

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 Server

Skipper 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比較靠譜。後面我們再來探索吧。


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

多讀書,多分享;多寫作,多整理。