在实际应用中,在批处理中用得较多的是场景是数据同步。在做数据集成工作中,常常需要从源位置把数据同步到目标位置,以便于进行后续的逻辑操作。在做这种批处理工具时,在网上查资料,发现用得比较多的是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框架)的开发人员,针对业务编程,可自由发挥。