微服務調度監控平臺Smart Kettle之新產品推介

本產品是基於開源Kettle自研的Kettle核心接口調用基礎組件,其實早在5年前就想搞了,構思了很久,拖到現在,不過還行,現在也不晚吧  
    最初的想法是啓蒙於當年給菸草做過的一個數據交換平臺的項目,數據的抽取是基於Kettle 5.x版本, 使用kettle的spoon客戶端做的數據抽取  
    爲企業解決了棘手並且重要的ETL問題,因此Kettle是一款非常優秀的開源數據抽取工具。  
    同時,kettle自身也有很多的問題,比如,
    - 只能使用客戶端配置作業、轉換
    - 跨平臺移植困難
    - 數據安全性較差,系統一旦崩潰,文件庫的內容容易丟失
    - 客戶端非常耗內存、CPU,只適合配置,不適合做業務
    - Web界面極其簡單、醜陋,生產環境無法投入使用
   
    基於上述幾個企業痛點,我才決定工作之餘,每天借用一點休息時間,慢慢積累,堅持不懈,纔有了今天Smart Kettle調度平臺的出世,也希望能切實  
    幫助到企業解決數據抽取、調度、監控的問題。

    歡迎各位讀者免費下載、安裝、使用!

 企業的痛點


- kettle的Spoon客戶端太耗內存,異常卡頓,性能瓶頸明顯
- kettle自帶web管理工具,極其簡陋,異常難用,無法投入生產環境
- kettle客戶端工具無法在linux系統使用
- kettle客戶端無法做到真正意義上的跨平臺,bat及shell腳本切換繁雜
- kettle客戶端遷移麻煩,每次都要安裝一遍,耗費精力


 簡介


     Smart Kettle是針對上述企業的痛點,對kettle的使用做了一些包裝、優化,使其在web端也能
     具備基礎的kettle作業、轉換的配置、調度、監控,能在很大一定程度上協助企業完成不同業務場景下
     數據的ETL(抽取、轉換、加工)的能力。
     注意:本系統並非是對kettle源碼的再造,而是藉助kettle的API,實現kettle在web端功能華麗的轉身
     


1. 它是一款超輕量級的kettle web端調度監控平臺


- 支持作業、轉換的自定義模板設置
- 支持作業、轉換的多任務模板複製
- 支持作業、轉換的GUI端配置同步到web端
- 支持作業、轉換的日誌自定路徑配置
- 支持作業、轉換的日誌文件下載管理
- 支持作業、轉換的集羣調度(遠程子服務器調用)
- 支持作業、轉換的GUI端配置同步到web端
- 支持作業、轉換的調度配置
- 支持作業、轉換的監控管理
- 支持作業、轉換的本地執行
- 支持作業、轉換的遠程執行
- 支持作業、轉換的定時配置
- 支持作業、轉換的實時監控
- 支持kettle的web端資源庫管理
- 支持自定義線程池設置、任務的並行處理
- 支持kettle 任務的告警監控、日誌管理
- 提供豐富的業務庫、字典庫自定義設置
- 提供完整的、實時的大盤調度監控
- 提供系統的用戶、角色、權限管理
- 提供Druid數據庫查詢腳本的實時監控能力
- 支持 Kettle 7.0.1+以上 版本

2. 它的平臺實現充分基於"前後端分離"思想


- 後端架構基於 Springboot實現
- 服務端可發佈 REST 服務
- 前端架構基於 VUE,數據組件更加豐富、易於維護
- 客戶端通過 AJAX 獲取服務端數據並進行界面渲染

3. 它的後端實現基於互聯網最流行的微服務技術


- 後端架構採用自己搭建的x-common-base框架
- 後端封裝了基於kettle的強大接口插件x-kettle-core
- 後端框架基於springboot+Mybatis實現
- 後端框架易於遷移、二次開發、方便維護

4. 它的前端實現基於互聯網最流行的漸進式VUE框架

- 功能組件化,易於二次開發維護
- 新手容易上手,短時間內入門
- 界面更加美觀、組件更加豐富
- 平臺功能架構見如下圖:  

 項目簡介

後端工程:


整個工程的目錄結構如下:  
- [gitee.com:x-smart-kettle-server](https://gitee.com/yaukie/x-smart-kettle-server.git)

```
├─doc
│  └─database
│      ├─MySql_ds0  --基礎數據庫設置
│      └─MySql_ds1  --基礎數據庫設置
├─docker  --容器部署詳情
├─folder
├─jenkins  --jenkins持續部署詳情
├─settings  --maven默認配置
├─src
│  ├─main
│  │  ├─java
│  │  │  └─org
│  │  │      └─yaukie
│  │  │          └─frame
│  │  │              ├─autocode  --代碼機入口
│  │  │              │  ├─controller
│  │  │              │  ├─dao
│  │  │              │  │  └─mapper
│  │  │              │  ├─model
│  │  │              │  └─service
│  │  │              │      ├─api
│  │  │              │      └─impl
│  │  │              ├─config  --系統基礎配置入口
│  │  │              ├─kettle
│  │  │              │  ├─api  --kettle核心接口所在位置
│  │  │              │  ├─core
│  │  │              │  ├─listener   --kettle監聽所在位置
│  │  │              │  ├─quartz   --定時器所在位置
│  │  │              │  └─service
│  │  │              ├─listener
│  │  │              └─pool   --線程池配置所在位置
│  │  └─resources   --核心配置所在位置
│  │      ├─mapper
│  │      ├─template
│  │      └─ui
│  │          └─images
│  └─test
│      └─java
│          └─org
│              └─yaukie
│                  └─frame   --核心邏輯所在位置
```   


前端工程:


- [內部網站:x-smart-kettle-front](http://open.inspur.com/yuenbin/x-smart-kettle-front.git)
- [github.com:x-smart-kettle-front](http://github.com/yaukie/x-smart-kettle-front.git)
- [gitee.com:x-smart-kettle-front](http://gitee.com/yaukie/x-smart-kettle-front.git)

```
├─docker
│  ├─dev
│  └─prod
├─jenkins
├─public
│  ├─cron
│  └─json
├─src
│  ├─api
│  │  ├─login-form
│  │  ├─main
│  │  │  └─components
│  │  │      ├─a-back-top
│  │  │      ├─error-store
│  │  │      ├─fullscreen
│  │  │      ├─header-bar
│  │  │      │  ├─custom-bread-crumb
│  │  │      │  └─sider-trigger
│  │  │      ├─language
│  │  │      ├─side-menu
│  │  │      ├─tags-nav
│  │  │      └─user
│  │  ├─page-box
│  │  │  └─src
│  │  │      └─styles
│  │  │          └─css
│  │  ├─page-table
│  │  │  └─src
│  │  │      ├─components
│  │  │      └─styles
│  │  │          └─css
│  │  ├─parent-view
│  │  ├─search-box
│  │  │  └─src
│  │  │      └─styles
│  │  │          └─css
│  │  ├─upload-file
│  │  │  └─src
│  │  │      └─styles
│  │  │          └─css
│  │  ├─upload-img
│  │  │  └─src
│  │  │      └─styles
│  │  │          ├─css
│  │  │          └─images
│  │  ├─upload-img-list
│  │  │  └─src
│  │  │      └─styles
│  │  │          └─css
│  │  ├─upload-video
│  │  │  └─src
│  │  │      └─styles
│  │  │          ├─css
│  │  │          └─images
│  │  └─weeks
│  │      └─src
│  ├─config
│  ├─directive
│  │  └─module
│  ├─libs --工具類
│  ├─locale --國際化配置
│  │  └─lang
│  ├─mock 
│  │  └─data
│  ├─router --基礎路由配置
│  │  └─modules
│  ├─store --系統狀態機
│  │  └─module
│  ├─styles
│  │  └─components
│  └─view --調度平臺核心前端功能
│      ├─business --業務配置
│      ├─examples
│      │  ├─common
│      │  └─page
│      ├─exception --異常監控
│      ├─homepage --調度大屏
│      │  └─common
│      ├─job --作業調度
│      ├─log --日誌監控
│      ├─login --登錄模板
│      ├─pool  --線程池配置
│      ├─repo --資源庫配置
│      ├─scheduler --定時器調度
│      ├─task --定時調度
│      ├─trans --轉換調度
│      └─warning --告警監控

```


 環境要求


- Maven3+
- Jdk1.8+
- Mysql5.7+

 功能概覽


- 登錄界面  


登錄界面內置了兩個賬號,一個是admin,一個是superadmin,密碼隨便輸入即可   


- 系統菜單  


- 調度大盤  

 


調度大盤上半部分,展示近期實例運行詳情,包括運行成功、運行失敗、運行中、以及未運行的實例總體概況  

調度大盤中間部分,則通過圖表統計作業以及轉換實例的分類情況  
 
調度大盤下半部分,則主要展示實例在某段時間的運行趨勢如何,可以透過折線圖很直觀的看出每個時間段的
執行情況,包括運行失敗、運行成功的次數分佈 
調度大盤的最下面則主要統計任務告警情況  

- 調度管理  



  調度管理分爲作業調度以及轉換調度,作業調度包括作業名稱、描述、運行狀態以及運行時間等信息展示 ,
  在作業調度查詢界面,選擇創建作業(按模板),則將會根據選定模板創建作業  

   在作業調度查詢界面,選擇新建作業(已有),則將會從資源庫中選擇已通過客戶端配置好的  
     作業  

   在作業調度查詢界面,選中目標作業之後,在上方點擊合適的執行按鈕,將會執行對應任務,並實時監控任務狀態   

   在作業調度查詢界面,選中目標作業之後,點擊調度監控,則可以查看作業的調度圖  
   上述所有操作,轉換調度的操作方式同作業類似    

- 定時調度  


在作業調度界面,選中執行方式,在執行方式中,選擇定時任務執行,則進入到定時執行調度界面  

 在作業定時界面中,您可以選擇任意的定時規則  

- 資源庫管理   


可以維護多個資源庫,本系統同時支持文件庫以及數據庫資源庫,但建議使用數據庫作爲資源庫,文件庫作爲 
資源庫使用過程中,經常會出現一些奇怪的問題,並且從數據備份角度來講,不安全  

- 告警監控   


告警監控主要採集作業任務或轉換任務在某段時間內的執行細節,並將執行細節以異常記錄的形式存儲下來  

便於後續任務調度過程中任務執行細節的跟蹤,方便開發或運維人員精準找出任務異常原因    

 使用方式


   - 下載源碼,自行搭建環境
   - 給你封裝好插件,本地bat或shell腳本跑
   - 基於雲端地址訪問(需要購買阿里雲或其他什麼雲服務器,要收費哦)  
   


1. 源碼訪問


- 下載 x-smart-kettle-server 後端應用 ,下載地址詳見上述簡介    


-  步驟一


          將源碼下載到本地,建議使用IDEA打開(Eclipse的沒空研究,本人很久不再使用),至於如何下載,如何導入至IDEA,
          作爲一個專業的研發人員,這裏不再贅述,直接進入到步驟二:  


 - 步驟二 


          配置一下maven的`setting.xml`,方便從本人的阿里雲倉庫下載相應的jar包,倉庫地址配置爲:
 ```
           

   <servers>
                  <server>
                      <id>rdc-releases</id>
                      <username>Y3z0VZ</username>
                      <password>Bb8byTSlq0</password>
                  </server>
                  <server>
                      <id>rdc-snapshots</id>
                      <username>Y3z0VZ</username>
                      <password>Bb8byTSlq0</password>
                  </server>
              </servers>


```
     ```
            

 <pluginRepository>
                              <id>snapshots</id>
                              <url>https://maven.aliyun.com/nexus/content/groups/public</url>
                              <releases>
                                  <enabled>false</enabled>
                              </releases>
                              <snapshots>
                                  <enabled>true</enabled>
                              </snapshots>
                          </pluginRepository>
                          <pluginRepository>
                              <id>rdc-releases</id>
                              <url>https://repo.rdc.aliyun.com/repository/128991-release-EJH8o1/</url>
                              <releases>
                                  <enabled>true</enabled>
                              </releases>
                              <snapshots>
                                  <enabled>false</enabled>
                              </snapshots>
                          </pluginRepository>
                          <pluginRepository>
                              <id>rdc-snapshots</id>
                              <url>https://repo.rdc.aliyun.com/repository/128991-snapshot-NY2Ub0/</url>
                              <releases>
                                  <enabled>false</enabled>
                              </releases>
                              <snapshots>
                                  <enabled>true</enabled>
                              </snapshots>
                          </pluginRepository>
                      </pluginRepositories>
                  </profile>


  ``` 
          內容不要更改,因爲裏面配置的是我本人的阿里雲倉庫地址,密碼不會再改變,如果有變化,會在網站統一通知,屆時,
          重新下載即可 ,倉庫環境配置好之後,靜靜等待jar下載吧,等下載完畢,要去倉庫檢查一下是否有如下幾個jar:  
```xml
          x1-simple-job-1.0.0-SNAPSHOT.jar
          x-kettle-core-1.0.0-SNAPSHOT.jar
          x-common-base-1.0.0-SNAPSHOT.jar
          x-common-pro-1.0.0-SNAPSHOT.jar
```
   如果本地倉庫有如上幾個jar,那麼恭喜您,下載成功,接下來開始進入到步驟三:  


 - 步驟三  


        開始配置一下應用的yml文件,文件內容如下:  
 ```xml

 #配置服務器  
         server:
           port: ${XTL_APP_SERVER_PORT:9876}
           servlet:
             context-path: ${XTL_APP_SERVER_PATH:/xtl-server}
           #配置數據源
         spring:
           redis:
             enabled: ${XTL_REDIS_ENABLED:false}
             host: ${XTL_REDIS_HOST:127.0.0.1}
             port: ${XTL_REDIS_PORT:6379}
             password: ${XTL_REDIS_PASS:root}
             jedis:
               pool:
                 max-active: 8
                 max-wait: -1
                 max-idle: 500
                 min-idle: 0
             lettuce:
               shutdown-timeout: 0
           application:
             name: ${XTL_APP_NAME:xtl-app} #應用服務名稱
           datasource:
             type: com.alibaba.druid.pool.DruidDataSource
             driver-class-name: com.mysql.jdbc.Driver
             #系統數據庫訪問地址【必填項】
             url: ${XTL_APP_DATASOURCE_URL:jdbc:mysql://localhost:3306/xtl?useUniCode=true&characterEncoding=UTF-8}
             #系統數據庫用戶名【必填項】
             username: ${XTL_APP_DATASOURCE_USERNAME:root}
             #系統數據庫密碼【必填項】
             password: ${XTL_APP_DATASOURCE_PASS:root}
             關閉sharding-jdbc 必須爲false
           shardingsphere:
             enabled: false
         kettle:
           scheduler:
             #是否開啓定時調度,默認爲fals,則系統啓動不會自動執行定時
             enabled: ${XTL_KETTLE_SCHEDULER:false}  #kettle定時調度啓用爲true,應用啓動之後,自動將任務加入到定時器執行,設置爲false則需要手動觸發定時任務
           log:
             file:
               #日誌物理路徑【必填項】
               path: ${XTL_KETTLE_LOG_FILE_PATH:/xtl/kettle/logs} 這個地方建議一定要配置一個存放目錄,方便後期下載,查看歷史執行記錄,如果爲"",則不會產生日誌到服務器
               size: ${XTL_KETTLE_LOG_FILE_SIZE:10} 控制日誌文件的大小,默認是10M,超過10M則截斷請求
           repo:
             自定義數據庫資源庫 使用之前必須先定義資源庫【必填項】
             name: ${XTL_KETTLE_REPO_NAME:臨時資源庫} 資源庫名稱【必填項】
             hostName: ${XTL_KETTLE_DB_HOST:localhost} 數據庫連接地址【必填項】
             dbPort: ${XTL_KETTLE_DB_PORT:3306} 數據庫端口 資源庫目前僅支持MySQL【必填項】
             dbName: ${XTL_KETTLE_DB_NAME:etl} 數據庫實例名【必填項】
             userName: ${XTL_KETTLE_DB_USERNAME:root} #數據庫用戶名【必填項】
             passWord: ${XTL_KETTLE_DB_PASS:root} 數據庫密碼【必填項】
             repoLoginName: ${XTL_KETTLE_REPO_LOGINNAME:admin} #資源庫登錄賬戶 默認admin【必填項】
             repoLoginPass: ${XTL_KETTLE_REPO_LOGINPASS:admin} #資源庫登錄密碼 默認admin【必填項】
             該線程池會優先充滿至最大的線程數(JDK默認優先將任務提交到隊列,隊列滿了再充滿至最大的線程數)
           pool:
             線程池前綴
             namePrefix: ${XTL_THREAD_POOL_PREFIX:kettleThreadPool}
             核心線程數
             coreThreads: ${XTL_THREAD_POOL_CORE:20}
             最大的線程數
             maxThreads: ${XTL_THREAD_POOL_MAX:50}
             隊列容量
             queueCapacity: ${XTL_THREAD_POOL_QUEUE_CAPACITY:100}
             5分鐘空閒則釋放
             keepAliveTimeMin: ${XTL_THREAD_POOL_KEEPALIVE:5}
         logging:
           #系統日誌存放路徑
           path: ${XTL_APP_LOG_PATH:/maven/xtl-web-server/logs}
           level:
             root: ${XTL_APP_LOG_LEVEL:info}


 ``` 
        
   配置註釋寫的很清楚了,這裏不再解釋,如有不懂的地方,請留言


        
 - 步驟四 


        步驟三完成之後,需要在本地建立一個應用數據庫,數據庫腳本詳見:doc->database->Mysql,包括建表語句及初始化數據  
        請自行在本地執行,並完善yml配置 。


 - 步驟五 


        步驟四完成之後,開始配置kettle資源庫數據庫,雖然本系統同時支持文件庫以及數據庫資源庫,但還是強烈建議使用數據庫作爲  
        資源庫,考慮數據移植方便性、安全性、高效性,使用數據庫作爲資源庫,資源庫請自行建立,並完善yml配置。


 - 步驟六 


        上述內容都配置好之後,這裏運行:
        ```
            Start.java
        ```
        啓動應用,並在瀏覽器訪問:http://ip:port/xtl-server/swagger-ui.hml ,出現如下截圖,那麼恭喜您啓動成功:


        
- 下載 x-smart-kettle-font 前端應用 ,下載地址詳見上述簡介   


     - 步驟一  


          Smart Kettle 調度監控平臺的前端部署,需要依賴NodeJs環境,請自行百度搜素下載、安裝,這裏不再贅述  
   --安裝NodeJs  
   --安裝Vue腳手架  
   --配置node環境變量  
 ```
              clone the project
                     git clone http://open.inspur.com/yuenbin/x-smart-kettle-front.git
                     git clone https://gitee.com/yaukie/x-smart-kettle-front.git
                     git clone http://github.com/yaukie/x-smart-kettle-front.git
                     // install dependencies
                     npm install
                     // develop
                     npm run dev
 ```


   - 步驟二


   配置一下`vue-config.js` ,把後端服務器的地址換成您的地址即可
```xml
 

 devServer: {
    proxy: {
      "/xtl-server": {
         target: "http://localhost:9876/xtl-server/",
        pathRewrite: { "^/xtl-server": "" },
        changeOrigin: true
     }
   }
  }


```
   然後執行 `npm run dev` 本地啓動應用,出現如下控制檯打印的信息,則恭喜您前端也啓動成功!  
     

 

2. 插件訪問


TODO


3. 雲端訪問


 TODO


 後續計劃

 

 相關模塊

 

> 注意:模塊不依賴於框架,可以獨立使用。

 

- [x-common-base](https://github.com/yaukie/x-common-base) -- 基於Springboot自研的微服務架構
- [x-common-pro](https://github.com/yaukie/x-common-pro) -- 構建統一的jar包存放基礎包
- [x-kettle-core](https://github.com/yaukie/x-kettle-core) -- 基於Kettle Api 打造的核心Kettle調用接口組件
- [x1-simple-job](https://github.com/yaukie/x1-simple-job) -- 基於Quartz的定時器調用插件

 


 參考資料

- Vue 那點事兒:https://my.oschina.net/yaukie/blog/1547678
- Docker 那點事兒:https://my.oschina.net/yaukie/blog/3165074

 官方交流


Smart Kettle 官方交流羣①(500人):668964239
Smart Kettle 官方交流羣②(500人):668964239

 聯繫我們


聯繫郵箱: [email protected]


 捐贈


No matter how much the donation amount is enough to express your thought, thank you very much :)   
  [To donate](https://my.oschina.net/yaukie/blog/4968854)
創作不易,無論捐贈金額多少都足夠表達您這份心意,非常感謝 :)    
  [前往捐贈](https://my.oschina.net/yaukie/blog/4968854)  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章