一、命名規則
作業、轉換、步驟的命名規則有可能會出現兩種極端情況:
- 把命名規則設計的過於繁瑣
- 根本沒有命名規則
顯然這兩種都不可行。
作業和轉換建議的命名規則:
1.轉換:tr_${階段名}_${表名}/${業務名}_customer
2.作業:jb_${階段名}_${表名}/${業務名}_customer
二、kettle配置文件
- .kettel/kettle.properties:
此文件包含轉換或作業裏需要的變量,spoon啓動後會自動加載該配置文件裏的自定義參數。
ps:kettle裏一些常量可以寫在配置文件裏,在kettle裏用${xxx}引用
#長時更新時間(job爲十分鐘定時,此時應多掃描5分鐘)
sql_limit= DATE_SUB( NOW(), INTERVAL 15 minute )
#短時更新時間(job爲十分鐘定時,此時應多掃描5分鐘)
urgent_sql_limit= DATE_SUB( NOW(), INTERVAL 15 minute )
#全盤掃描開始時間(如果遭遇宕機以及強制停止kjb進程,需設置爲kjb進程停止時間之前)
start_time = '2019-01-01 00:00:00'
#數據庫
mysql_host = xxx
mysql_pluto_report_datasource = xxx
mysql_pluto_user_datasource = xxx
mysql_pluto_payment_datasource = xxx
mysql_pluto_map_route_planning_datasource = xxx
mysql_port = xxx
mysql_user = xxx
mysql_password = xxx
數據庫db配置引用:
轉換sql引用:
- ./kettle/shared.xml:
此文件裏包含共享對象,其類似於轉換的步驟、數據庫連接定義、集羣服務器定義等這些可以一次定義,然後在轉換和作業裏多次引用的對象。 spoon啓動時,會加載shared.xml自定義的所有對象,且這些對象級別高於單個轉換、作業裏的對象。
- .spoonrc
用於存儲Spoon程序的運行參數和狀態。
三、日誌管理
kettle可以使用數據庫日誌和文件日誌
數據庫日誌:可以記錄更多的內容,結構化,方便查詢和管理。
文件日誌:比較靈活,如若發生錯誤,可將文件單獨拿出來分析。
項目上線後,由於防火牆設置或者安全因素,維護者可能無法訪問日誌數據庫,所以一般來說還是使用文件日誌。
·數據庫日誌設置方式:
?文件日誌在轉換裏指定輸出文件。
四、處理錯誤通知
1.在主作業流中每個作業執行失敗時都應該發送錯誤郵件。
2.作業流中前後無關的轉換應用 ,應使用無條件的節點條件,這樣可以保證後面的轉換也可正常運行。
五、調度問題
使用crontab還是kettle自帶調度,還是第三方調度?
- 應避免使用kettle任務的start調度,kitchen進程會長期駐留,容易產生OOM錯誤。
- 可以使用操作系統的調度,比如linux系統的craontab調度。kitchen執行完會完全退出,不駐留內存。
- 也可以使用第三方調度,傳遞給第三方程序執行。
六、調優
kettle由純java編寫,性能非常強大,但是如果操作不當,會產生性能問題。
·容易產生性能問題的步驟
- 查詢類:數據庫查詢,數據庫連接,http,get/post,webservice,插入更新。
- 運算類:格式轉換,複雜計算
- 排序類:排序,合併連接,分組
·調優
關鍵:Rowset
- Rowset是兩個步驟之間的緩存。
- 性能調優需要找出性能瓶頸步驟。
性能瓶頸的調優方案:
- 數據庫查詢類,相應表建立合適的數據庫索引
- 增加複製數:查詢類
- 加大緩存
- 集羣:查詢類,運算類,排序
- 死鎖問題:數據庫死鎖(讀寫同一表);轉換本身死鎖
- 日誌級別
Rowset日誌級別性能會嚴重下降,是Basic的1/10,推薦使用Basic,若數據量巨大,更新頻繁,且無查看步驟量需求,推薦使用Error級別日誌