开源的大数据服务器(面向服务的大数据ETL集成)(1)

在前面谈ESB服务设计器和轻量的ESB服务编排的时候可以看到,在和数据库适配相关层面,我们重点只在解决一类问题,通过数据库适配的方式来发布一个查询服务或导入服务。对于查询服务具体转化为对数据库的Select操作,而对于导入服务则转化为对数据库的Insert操作。

即ESB的服务设计或轻量编码,数据库端是后端适配,最终目的是查询或导入数据,最终则发布一个服务。

我今天谈面向服务的ETL集成,和原来谈的数据库适配和服务发布最大的区别就在于数据库适配仍然存在,但是在服务编排过程中不产生新的服务,而是产生一个类似定时调度的任务,这是和前面场景最大区别。对于这种模式我们举例来进行说明。

场景一:定时调用某个查询服务获取增量数据,同时将增量数据插入到某个数据库表

在该场景下可以看到,我们需要形成一个定时调度任务,输入增量查询条件对查询服务自动触发调用,在调用完成后获取到增量数据后,再通过数据库适配,将数据写入到某个数据库表中。在整个过程中实际上有三个重点,一个是触发服务调用,一个是数据转换映射,一个是数据库适配。

场景二:定时调用某个ETL查询操作,获取到数据集,再去触发对某个导入服务的调用导入数据

这个场景刚好是场景一的逆向场景,即定时调度任务首先是通过数据库适配获取到数据集,但是在获取到数据集后不是将其发布为服务,而是直接去调用另外一个外部导入服务,将数据推送到这个导入服务里面。当然也可以是将数据推送到某个JMS消息管道中。

开源的大数据服务器(面向服务的大数据ETL集成)(2)

场景三:定时调用ETL操作获取数据,再调用服务返回数据,再调用ETL操作将返回结果导入数据库表

这场景实际上对接的两个系统,一个提供服务,一个提供DbLink连接的对接场景。首先是通过ETL获取数据,然后调用导入服务推送数据,同时将导入服务调用的结果信息再次调用ETL操作将返回结果插入到数据库。

场景四:先调用查询服务获取数据,再调用ETL操作插入库表,如果存在异常调用服务写入异常信息

这种场景实际也是服务和ETL之间的一个组合,即先调用查询服务获取增量数据,然后调用数据库适配将增量数据写入到数据库表,如果在写入过程中出现异常,则将调用异常信息导入服务将异常信息返回。

对于原来我们经常谈到的类似ODI模式的WS ETL的集成,本身没有变化,即将一个数据库的ETL操作发布一个WS服务,通过调用查询服务来输入查询条件,通过基于查询条件获取数据并ETL操作到目标数据库,然后再返回具体的输出结果。这种WS和ETL集合的模式,由于大数据量的ETL没走ESB总线,因此能够获得更好的性能。

ESB服务总线和大数据传输平台的集成

开源的大数据服务器(面向服务的大数据ETL集成)(3)

在Oracle SOA套件里面可以看到有类似于Oracle ODI的大数据服务集成方案,其本质仍然是WS ETL的能力组合,在我们自研的ESB中准备集成大数据服务能力,即考虑底层采用最新的DataX来进行集成。

其集成的核心思路仍然是将WS和ETL能力进一步结合,同时实现服务调用消息控制流和实际大数据传输数据流的分离。同时通过对服务的调用来实现ETL的实时按需触发和参数化服务调用。

其核心思路如下,在设计期:

1. 需要设计一个SOAP Web Service服务,该服务的输入有标准的开始时间和截至时间段输入信息,输出有同步完成的数据量,同步Flag状态标准,日志异常信息字段。 2. 将设计完成的Web Service服务在大数据服务总线平台进行注册。 3. 在底层通过DataX来实现TL作业任务,该作业任务使用参数化查询SQL语句对源数据库符合条件的数据进行查询。而具体的参数可以通过在服务调用的时候传入。 4. 具体设计详细的ETL作业任务,包括源和目标数据库的配置,数据映射。 5. 通过配置界面设计服务查询输入和参数化查询SQL之间的数据映射。 6. 通过配置界面设计ETL作业任务结果同服务输出字段之间的数据项映射。

在运行期的调用逻辑如下:

1. 服务消费方调用 ESB总线发布的Web Service服务,传入时间段条件。 2. ESB总线在接收到服务调用请求后,将服务的输入根据已经配置的数据映射传递给ETL作业的参数化查询中。 3. 在完成数据映射后实时启动ETL任务的执行,ESB服务调用过程处于等待状态。 4. ETL任务执行,将数据从源数据库抽取并同步到目标数据库,整个数据流的集成将在源数据库和目标数据库之间完成,即数据流不通过ESB服务总线以减少ESB总线压力。 5. 在ETL任务完成后获取ETL任务结果信息,并将结果信息返回给ESB服务的服务调用输出中。 6. ESB服务将服务调用输出返回给服务消费方。

整个设计过程我们通过前台可配置的界面来配置完成,即主要是配置服务的输入输出,数据源,数据目标,数据源和数据目标之间的映射关系。根据这些配置信息一方面是进行WS服务的封装和发布,另外一方面则是生成DataX需要的Json配置文件。

当然整个完成的DataX任务也可以通过CronTab来配置定时作业任务进行定时调度。

,