在實際應用中,在批處理中用得較多的是場景是數據同步。在做數據集成工作中,常常需要從源位置把數據同步到目標位置,以便於進行后續的邏輯操作。在做這種批處理工具時,在網上查資料,發現用得比較多的是kettle及阿里的datax,對於這兩款工具,各有各的優缺點。
kettle
kettle是一款可以可視化編程的開源ETL工具,把數據處理簡化為Job和Transform,在Transform中,提供了各種數據讀、寫、轉換、處理的工具。開發者僅需要以工具界面中拖拽相應的工具,進行步驟連接即可完成一個ETL工作,不同的工具及步驟結合起來可以形成相對復雜的作業流程,以完成ETL工作。它的優點就在於可視化編程,非常容易上手,對於不熟悉編程的人員來說,是一個福利。個人感覺針對簡單(即邏輯判斷和操作不多的)的ETL工作,是比較推薦用它。但缺點也有,一是易學難精,它提供的操作非常多,要把它們都熟悉而且做到相互結合來完成任務,是有一定難度的。二是對於一些復雜的的邏輯判斷及操作,kettle雖然可以做,但操作起來就很復雜。三是不方便調試,盡管它內置有調試功能,但由於在轉換中,操作都是並行的,單步調試比較難實現。四是內存消耗,本身kettle界面跑起來已經是比較耗內存的,而作業中數據量大的時候,內存消耗更大。
datax
DataX 是阿里巴巴集團內被廣泛使用的離線數據同步工具/平台,實現包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS
等各種異構數據源之間高效的數據同步功能。DataX本身作為數據同步框架,將不同數據源的同步抽象為從源頭數據源讀取數據的Reader插件,以及向目標端寫入數據的Writer插件,理論上DataX框架可以支持任意數據源類型的數據同步工作。同時DataX插件體系作為一套生態系統, 每接入一套新數據源該新加入的數據源即可實現和現有的數據源互通。
DataX從架構上而言也是設計得很簡潔的,它作為數據搬運工,支持任意數據類型的同步工作,跟Spring Batch
有異曲同工之妙,DataX本身作為離線數據同步框架,采用Framework + plugin
架構構建。將數據源讀取和寫入抽象成為Reader/Writer
插件,納入到整個同步框架中。 Reader:Reader為數據采集模塊,負責采集數據源的數據,將數據發送給Framework。 Writer: Writer為數據寫入模塊,負責不斷向Framework取數據,並將數據寫入到目的端。 Framework:Framework用於連接reader和writer,作為兩者的數據傳輸通道,並處理緩沖,流控,並發,數據轉換等核心技術問題。
DataX本身也提供比較豐富的Reader和Writer,按它的文檔,以它作為工具進行數據同步,還是比較簡單的。而且有阿里的背書,可放心使用。不過缺點一是不常維護更新,github上最近的更新是去年(2018);二是二次開發有難度,我嘗試跑源碼,想做二次開發,雖然最終跑起來,但也費了不少力氣。三是雖然架構清晰,但使用規則操作起來不是很靈活,基本是通過json配置文件,按規則進行配置,想自定義規則是不行的。
總體感受
相對而言,統合考慮易用性、可擴展性,靈活性,可編程性,Spring Batch
會比較適合有點編程基礎(特別是使用Spring及SpringBoot框架)的開發人員,針對業務編程,可自由發揮。