ETL 可行性方案 Kettle
一、Kettle
1.1 簡介
Kettle是一款基于Java語言開發(fā)的可視化編程開源ETL工具,支持單機(jī)、集群方式部署。
數(shù)據(jù)處理簡化為Job(流程控制、調(diào)度)和Transform(數(shù)據(jù)轉(zhuǎn)換流)。
1.2 ETL
ETL工具特性:
連接、平臺獨(dú)立、數(shù)據(jù)規(guī)模(并發(fā)、分區(qū)、集群)、復(fù)用性、擴(kuò)展性、數(shù)據(jù)轉(zhuǎn)換、測試和調(diào)試、日志審計
二、優(yōu)點(diǎn)
基于Java開發(fā)、開源、跨平臺,社區(qū)支持
支持分布式集群方式部署,主從架構(gòu)
插件架構(gòu)擴(kuò)展性好, 支持的擴(kuò)展插件: 作業(yè)、轉(zhuǎn)換、分區(qū)、數(shù)據(jù)庫
全面的數(shù)據(jù)訪問支持(支持多個數(shù)據(jù)庫, 如果非默認(rèn)支持,還可以通過插件擴(kuò)展)
方便易用的GUI操作界面
支持java/script/sql自定義轉(zhuǎn)換邏輯,支持自定義失敗處理步驟
可視化編程,容易上手?(組件繁雜、熟練使用需要一定時間)
三、缺點(diǎn)
集群模式采用主從結(jié)構(gòu),不具備自動切換主從的功能。所以一旦主節(jié)點(diǎn)宕機(jī),整個系統(tǒng)不可用
對網(wǎng)絡(luò)要求高,節(jié)點(diǎn)之間需要不斷的傳輸數(shù)據(jù)
免費(fèi)版的Kettle缺乏必要的數(shù)據(jù)異常處理(簡單拋出)和監(jiān)控運(yùn)維等管理功能服務(wù)。實(shí)際測試中經(jīng)常出現(xiàn)一些莫名異常,調(diào)試比較困難。
bulk load數(shù)據(jù)無法查找出錯誤明細(xì)。
內(nèi)存占用。并發(fā)模型中各組件以管道(hop)相連,后續(xù)某個組件處理速度較慢時,容易成為性能瓶頸.

支持簡單的數(shù)據(jù)分析工作,如sort/group by/aggregator,不適用數(shù)據(jù)量較大的場景。
對于數(shù)據(jù)分析工作來說,需注意Kettle目前不具備時間窗口、中間狀態(tài)存儲、延遲消息策略等實(shí)時計算引擎特性
對于簡單的ETL任務(wù)Kettle略顯笨重,8.2版本安裝包1.1G大小.手動編譯的9.2版本1.7G
Kettle資源庫用于保存自定義的轉(zhuǎn)換任務(wù)等元數(shù)據(jù)信息,支持本地、數(shù)據(jù)庫方式。測試中使用數(shù)據(jù)庫方式時操作卡頓頻繁。
對最近幾年新出現(xiàn)存儲引擎的支持不足(相對datax來說). 如: elasticsearch/druid/kudu...
源碼統(tǒng)計

四、測試
4.1 測試環(huán)境
kettle版本: 8.2.0.0
測試環(huán)境:
master 10.128.2.64
slave1 10.128.2.86
slave2 10.128.2.54
JVM: -Xms1024m -Xmx2048m
kettle集群監(jiān)控web頁面: http://10.128.2.64:8090/kettle/status/
4.2 Mysql連接查詢
場景: 集群模式,表現(xiàn)良好.
2.139/2.54 mysql數(shù)據(jù)庫: SVR_N_ACTION/SVR_U_APPLICATION關(guān)聯(lián)查詢
查詢2.54 SVR_U_ACTION表(500w記錄)
查詢1.139 SVR_U_APPLICATION(1224記錄)
action.app_id=application.id關(guān)聯(lián)
字段選擇: action_id, action_name, application_name
過濾action_name字段輸出到log日志
查詢結(jié)果同步到2.54 SVR_U_ACTION
拓?fù)鋱D:

集群運(yùn)行監(jiān)控:

4.3 kafka
場景: 本地, kafka消費(fèi)、生產(chǎn)
數(shù)據(jù)結(jié)構(gòu):
{
"trace_id":"05543abec3cd444a861ad32f232d872b",
"action_type":"bg",
"application_id":366,
"url":"4p6g3cab0h6mbqfyt6ggaaozqw70mo",
"biz_system_id":529,
"action_id":970677,
"action_name":"angxk9ahcr",
"id":"82e9b1e4a34a427097e2a5ed4a15ab27",
"perf":102388,
"timestamp":"2021-02-12 16:42:38"
}

4.4 group_by-1000w
場景: 集群模式, 1000w記錄
SQL:
select
ss_sold_date_sk,
ss_wholesale_cost,
avg(ss_item_sk) as ss_item_sk_avg,
COUNT(DISTINCT ss_sales_price) as ss_sales_price_cnt,
count(*) as cnt
from store_sales_all
where ss_sold_date_sk
between 2451813 and 2451900 and ss_sold_time_sk between 65400 and 66000
group by ss_sold_date_sk,ss_wholesale_cost
order by ss_item_sk_avg desc,ss_sold_date_sk拓?fù)?

運(yùn)行監(jiān)控:

4.5 group-by-5000w


4.6 group-by-all-5000w
去除where過濾條件,全量group by

4.7 group-by-all-2.8億
五、總結(jié)
Kettle歷經(jīng)近二十年發(fā)展,架構(gòu)設(shè)計(插件體系)、交互設(shè)計比較完善,若從頭設(shè)計有較好的參考性。
作為ETL工具來說功能比較豐富, 甚至略顯繁雜,有一定的學(xué)習(xí)成本。
支持分布式集群,目前開源的datax不支持.
使用感受,作為研發(fā)人員來說不太習(xí)慣. 比如一些簡單的邏輯處理,通過圖形界面操作比較麻煩,甚至說有點(diǎn)折磨!
數(shù)據(jù)同步、失敗處理、任務(wù)調(diào)度、管理和監(jiān)控、拓?fù)湓O(shè)計與調(diào)試
對于實(shí)時etl場景來說,無論kettle還是datax支持都不夠, 實(shí)際場景中很可能需要類似flume這種第三方工具支持.
基本滿足BPI業(yè)務(wù)需求
六、個人意見
綜合投入成本,項目周期等因素,建議前期以Kettle作為ETL基礎(chǔ).可能的話BPI先行.
架構(gòu)實(shí)現(xiàn)上, web端ETL拓?fù)鋽?shù)據(jù)模型單獨(dú)設(shè)計,與底層ETL引擎進(jìn)行隔離.
參考:
《Pentaho Kettle解決方案:使用PDI構(gòu)建開源ETL解決方案》
Kettle插件結(jié)構(gòu): https://zhuanlan.zhihu.com/p/24982421
Kettle體系結(jié)構(gòu): https://blog.csdn.net/romaticjun2011/article/details/40680483
source: https://www.yuque.com/gejuntingyun/kb/pgwv5q

喜歡,在看
