本產品是基於開源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)