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

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

# 1 前言 > 歡迎訪問[南瓜慢說 www.pkslow.com](https://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`。兩者作用不同,互相協作。 ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085235294-2004615703.png) `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`包: ```bash 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 啟動應用 ```bash # 啟動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 ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085235607-1780262162.png) ## 3.3 部署應用 ### 3.3.1 新增應用Applications 只有添加了應用,才能部署`Batch`和`Stream`。官方提供了示例`Applications`,我們直接使用就可以了: ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085236156-47679344.png) 新增成功後,在應用列表可以檢視: ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085236552-2119526084.png) ### 3.3.2 建立Task 建立`Task`可以圖形化建立,也可以通過`DSL`來建立,非常方便: ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085236785-882473285.png) 定義好`Task`後,輸入名字建立: ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085237085-2146985457.png) ### 3.3.3 執行Task 直接點選執行: ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085237302-241571880.png) 可以傳入引數: ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085237669-1081675816.png) ### 3.3.4 檢視Task執行情況 ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085237997-1589624838.png) ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085238315-2088732008.png) 可以檢視執行日誌: ![](https://img2020.cnblogs.com/other/946674/202008/946674-20200802085239034-23684260.png) ## 3.4 Data Flow Shell命令列 除了在網頁上,還可以通過命令列模式來與`Server`進行互動。 啟動應用: ```bash $ 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://img2020.cnblogs.com/other/946674/202008/946674-20200802085239810-355701847.png) **多讀書,多分享;多寫作,多整