一个实际项目Java架构设计之ETL(Kettle)部分介绍 - Go语言中文社区

一个实际项目Java架构设计之ETL(Kettle)部分介绍




1  总体设计

1.1 总体设计

  • 所有的数据源都将在ETL中配置数据源连接,分别建立好数据转换包处理各自同步、清洗业务,相关的规则都配置到ETL转换包中

  • 展示平台仅有一些最终统计数据展示报表(尽可能不出现多个地方配置规则)

  • 第三方系统将通过一个web service服务器接口获取到数据中心的信用信息

  • 运政等公司内部系统则可以直接连接中心数据库交换信用有关的数据

     

     

1.2 中心数据库与各业务数据库关系图

  • 关于信用相关的表,三个库(中心库、内部系统库1、内部系统库2)都一样的表结构(接口表除外:未经处理与外部数据源结构一致的表,参见数据中心总体结构设计),只是在记录上,中心库最全,内部系统库1、内部系统库2分别只包含自己的部分。

  • 关于接口表,内部三个系统之间表结构可以省去接口表部分,即直接进行业务表之间的同步。

     

     

 

1.3 Kettle ETL工具分析  

 

  • Kettle介绍:是一款国外开源的ETL工具,纯java编写,可以在WindowLinuxUnix上运行,数据抽取高效稳定,采用LGPL授权协议的自由软件,开发出来的新软件可以是私有的而不需要是自由软件,即可以放心自由地使用。

  • 流程执行示例:

    作业调度示例(些作业中会执行上图中的转换任务,并设置为每分钟执行一次,并重复执行)::

    部署示例:

     

2  中心数据中总体结构设计

上图中,以user表为例,其中橙色部分为ETL处理过程序,其主要流程是:

  1. 首先在中心数据库中建立一个名为“XXX_interface的表,它与外部的数据表结构保持一致,接收到的数据记录会首先放入到这个表中,主要是方便追溯统计

  2. ETL工具将采用增量同步方式从外部表获取自上次同步后的所有数据,会按原数据不作处理地同步到接口表中(如果为主键冲突则例外处理),并记录这个过程中同步时间戳,状态态信息(如异常、同步的记录数量)

  3. 紧接着,将会从接口表到正式表的同步,这时会对数据按照制定的规则做清洗、汇总,输出则是:正式的数据记录;过程中的状态(异常等)、时间戳信息;汇总情的更新(如一些中间结果汇总表在相关子表变化后也需要做增量同步)

  4. 将加入汇总处理部分。

3  子系统/模块设计

3.1 数据过滤、清洗过程设计

初设中的数据质量要求,可以大体总结为:

  1. 设置上限和下限,如果超过则记录为问题数据;

  2. 趋势分析,即当数据发现最近连续7个点上升或连续7个点下降将视为异常

     

    数据流向分支,即对一个数据集进行条件判断,条件成立时会流到某一去处,不成立的一批数据会到另一个出处:


     

3.2 关键指标报警设计

件邮发送,但发现错误时

 

报警邮件邮件示例

 

3.3 同步日志、状态表设计

统一为一张表来记录所有过程中,各种状态值,见数据库设计。

 

3.4 增量同步

  • 对于较小的表进行全表对比

  • 对于较大的表进行时间戳同步,但要注意的是完备性方面,时间戳方式不能捕获DELETE操作,需要结合其它方式一起使用

 

 

4  运行设计

  • 支持多种操作系统运行,只需安装好jre运行环境即可。部署过是:直接将一个文件包复制到服务器,在服务器上让包中的一个批处理执行文件每次开机时自动执行即可(在windows下是一个.bat文件,在linux下是一个.sh文件),该批处理将会执行相关的作业调度程序包,作业调度包中包括了实际ETL过程。

  • 以配置文件方式修改实际生产环境与测试环境的参数(如WebServices url、数据库链接等),方便在开发测试环境与正式生产环境之间切换。

  • ETL包在运行过程,需要不断维护升级,可以通过停止服务并覆盖相应的作业或ETL包,再次启动即可。

5  系统数据结构设计系统数据结构设计

6  系统出错处理设计

6.1 设计要求

由于ETL服务在任意时刻都可以出现各种异常,所以保证:

  • ETL服务在任意时刻都可以停止,在重新启动后仍能正常完成“打断的工作

  • 并且可以重复地执行而不会产生冲突和不一致性的数据

  • 足够的错误信息,快速的定位错误点,快速的修改问题

     

6.2 设计策略

  • 同步过程状态做好记录,按增量同步的方式进行;

  • 同步过程状态与数据表的相关操作写在一个存储过程中,并采用事务处理;

所有的作业、包、存储过程都有异常处理,并都有相应的记录方式,作业和包的异常主要记录到文本日志和邮件中,而存储过程则记录到数据库日志表中。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/cpaqyx/article/details/46481793
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-06 22:05:23
  • 阅读 ( 1083 )
  • 分类:架构

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢