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 Task或Spring Batch框架來開發Batch應用,完成開發后,可以打包成兩種形式:
- (1)
Springboot式的jar包,可以放在maven倉庫、檔案目錄或HTTP服務上; - (2)
Docker鏡像,
對于Stream,有三個概念是需要理解的:
- (1)
Source:訊息生產者,負責把訊息發送到某個目標; - (2)
Sink:訊息消費者,負責從某個目標讀取訊息; - (3)
Processor:聯合Source和Sink,它從某個目標消費訊息,然后發送到另一個目標,
2.2 特性
Spring Cloud Data Flow有許多好的特性值得我們學去使用它:
-
基于云的架構,可部署在
Cloud Foundry、Kubernetes或OpenShift等, -
有許多可選擇的開箱即用的流處理和批處理應用組件,
-
可自定義應用組件,且是基于
Springboot風格的編程模型, -
有簡單靈活的
DSL(Domain Specific Language)去定義任務處理邏輯, -
有美觀的
Dashboard能可視化地定義處理邏輯、管理應用、管理任務等, -
提供了
REST API,可以在shell命令列模式下進行互動,
2.3 服務端組件
服務端有兩個重要的組件:Data Flow Server和Skipper Server,兩者作用不同,互相協作,

Data Flow Server的主要作用有:
- 決議
DSL; - 校驗和持久化
Stream、Task和Batch的定義; - 注冊應用如
jar包應用和docker應用; - 部署
Batch到一個或多個平臺; - 查詢
Job和Batch的歷史執行記錄; Stream的配置管理;- 分發
Stream部署到Skipper,
Skipper Server主要作用有:
- 部署
Stream到一個或多個平臺; - 基于有灰度/綠色更新策略地更新或回滾
Stream; - 保存每一個
Stream的描述資訊,
可以看出,如果不需要使用Stream,可以不用部署Skipper,兩者都需要依賴關系型資料庫(RDBMS),默認會使用內置的H2,支持的資料庫有H2、HSQLDB、MYSQL、Oracle、PostgreSql、DB2和SqlServer,
2.4 運行環境
優秀的Spring的解耦能力總是特別強,Server和應用可以運行在不同的平臺,我們可以把Data Flow Server和Skipper Server部署在Local、Cloud Foundry和Kuernetes,而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
只有添加了應用,才能部署Batch和Stream,官方提供了示例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比較靠譜,后面我們再來探索吧,
歡迎關注微信公眾號<南瓜慢說>,將持續為你更新...

多讀書,多分享;多寫作,多整理,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/115571.html
標籤:Java
