1. 数据归集习以为常的几大问题
数据归集是大家项目中都会去做的,而且很多朋友也了解很多开源工具。那么你是不是会遇到如下问题呢?
(1)面对几万张表,你是不是只能一张一张地归集? 可能你有全库同步的手段,但是你能不能从一个库5000张表里选择4000张表同时归集呢?
(2)建设一张表10亿条数据,你能让这10亿条数据自动平均分配到5个节点上运行,并且每个节点是按多线程运行,以提升性能吗?
(3)如果你采用的工具不兼容源端数据库版本,你怎么办?
(4)归集前,你是不是需要在目标端先建好表才行?(create table …),几万张表,你要建几万次哦。
(5)源端的数据是按照某个时间戳字段递增的,于是你采用了增量同步方式,以减少时延,但是,源端的另一个字段数据也会发生更新,这种情况下,你是不是只能采用全量同步来解决?而这张表又很大,所以,你也只能眼睁睁地看着,时延很大比如需要8小时全量同步才完成,但你也没办法解决。
(6)如果源端只提供了API让你对接,而且源端的数据是加密的,你需要不需要人工写程序来适配源端的API?
如果以上问题存在,那就说明,项目上需要一支团队来做数据集成工作,运维成本高,而且,数据更新时效性可能不好。
2. 我们的数据归集方式
目前,我们支持的数据归集方式,主要包含如下几种:
1)库表归集
库表归集通过引导式自动化配置,实现几千张表同时归集的极简配置。底层调用分布式并行计算引擎,所以归集速度快;由于不仅仅是全量同步,还支持增量同步、差异更新同步,所以归集频率和时延都可以降到秒级;通过 JDBC 驱动实现数据库间的方言转换、协议适配与数据类型映射,确保不同数据库间的无缝数据同步,因而能对广泛的数据兼容性更强。汇聚不同来源数据,建立自动适配异构数据源自动化同步方法,实现包括关系型数据库MySQL、Oracle、DM、GuassDB等、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
• 采集速度快,采用分布式多节点部署, 单节点采集速度最高达到10万条/秒。支持断点续传。支持限制传输速率。
• 支持多种数据来源,除了各种关系数据库、NOSQL 数据库。
• 不影响源端系统对源端无干涉的情况下,稳定数据传输,可以限制传输速率。
• 不在数据源安装插件,对源端无干涉。支持全量同步、增量同步、差异更新同步。支持单表、多表、全库、多库的数据自动归集。
• 引导式归集策略定义,简单方便。详尽的任务记录全留痕、统计报表和异常提醒追溯,在线查看日志。
2)增量同步与差异更新同步
增量同步是指只从数据源中抽取新增的数据,并将其插入到目标系统或数据仓库中。其原理如下:
• 数据变化识别:通过比较源端库表和目标系统或数据仓库中对应字段的时间戳、序列号或唯一标识等信息,识别出新增的数据记录。
• 数据读取:从源端库表中读取识别出的新增数据记录。
• 数据传输与插入:将读取到的新增数据传输到目标系统或数据仓库中,并插入到相应的表中。
• 增量同步的优点是能够减少数据抽取的时间和资源消耗,提高数据抽取的效率。归集系统需要维护额外的元数据(如时间戳、序列号等)来跟踪数据的变化。该方案需要有“动态跟踪增量插入算法”:
(1)首次任务,首先开始读取源端全量数据。
(2)第二次任务,第一次读取增量数据。此时,源端在最后1毫秒期间产生了1000条数据,读取的一刹那,归集系统只获取了最后1毫秒的1000条数据中的前600条数据
(3)第三次任务,第二次读取增量数据,必须要能知道上1毫秒,还有400条数据需求读取,然后再从下一毫秒开始读取增量数据。
该算法的两个核心特点:
• 动态跟踪:算法能够动态地识别并跟踪数据源中新增的数据记录,通过时间戳、序列号或唯一标识等信息来定位新增数据。
• 增量插入:明确了算法的操作方式,即将识别出的新增数据插入到目标系统或数据仓库中,而不是进行全量数据抽取,从而提高了数据抽取的效率。
图-动态跟踪增量插入算法
• 差异更新同步是指基于增量同步的机制基础上,能发现从数据源中已经抽取过但是却发生变化的数据(包括修改和删除),将过去已经抽取了但发生变化的数据,重新更新到目标系统或数据仓库中。其原理相对复杂,具体步骤如下:
• 数据变化识别:同样通过比较源端库表和目标系统或数据仓库中对应字段的时间戳、序列号或唯一标识等信息,识别出已经抽取过但已发生变化的数据记录。对于修改的数据,需要确定哪些字段发生了变化;对于删除的数据,需要确定哪些记录被删除。
数据传输与更新:
• 对于修改的数据,将读取到的变化数据传输到目标系统或数据仓库中,并更新到相应的表中。更新操作通常包括定位到需要更新的记录,然后替换或修改相应的字段值。
• 对于删除的数据,需要在目标系统或数据仓库中执行删除操作,以删除相应的记录。删除操作通常通过匹配唯一标识或主键来实现。
• 差异增量更新的优点是能够确保目标系统或数据仓库中的数据与源端库表中的数据保持一致。归集系统需要采用复杂的逻辑来识别和处理数据的变化,同时利用并行读写引擎快速执行读取和更新操作。
图-差异增量更新
3)接口归集
接口归集是一个通过界面配置自动生成接口归集并从源端获取数据的工具。它支持 GET、POST、PATCH 等 HTTP 请求方法,允许用户配置 URL 参数、Body 参数、请求头,并提供参数转换功能(无需转换和采用Java脚本转换)。该工具支持多种 BODY 参数格式(form-data、application/json、text/plain),并且参数来源可以是自定义或来自库表配置。
(1)界面配置
• 用户通过图形化界面输入 API 的基本信息,包括请求方法(GET、POST、PATCH 等)、URL、URL 参数、Body 参数、请求头等。
• 用户可以配置 URL 参数,这些参数可以是静态值,也可以是来自其他库表或自定义变量。
• Body 参数支持 form-data、x-www-form-urlencoded、application/json、text/plain 等格式,用户可以选择参数来源(自定义或库表配置)。
•请求头支持自定义设置,并允许使用 Java 脚本对请求头进行任意转换。
(2)参数转换
• 无需转换:直接使用用户配置的值。
• Java 脚本转换:用户可以编写 Java 脚本对参数进行转换,以满足源端接口的特殊要求。
(3)API 生成与调用
• 根据用户配置的信息,系统动态生成对应的 API 请求代码。
• 系统调用生成的 API 请求,通过客户端向源端发送请求。
• 系统接收源端返回的响应数据,并进行必要的处理(如解析 JSON、处理异常等)。
(4)结果展示与存储
用户可以选择将响应数据存储到指定的库表中,以便后续分析和使用。
4)文件归集
系统支持通过文件导入的方式获取数据,并自动导入到关系型数据库和非关系型数据库如Hive中。提供多种格式的数据文件导入,包括但不限于csv、txt、xlsx、lsx ,并将支持json,xml,orc文件上传资源。
5)非结构化文件获取与存储
我们通过支持FTP、SFTP、SSH等多种文件传输方式,将各地各系统产生的非结构化文件(如图片、音视频、文档等)自动归集到统一平台。归集后的文件会存入Minio分布式文件存储系统,实现文件的高效分布式存储和集中管理。这保证了非结构化数据的安全性、可靠性和可扩展性,同时便于后续的统一访问和管理。
6)实时同步
CDC实时同步,即Change Data Capture(数据变更捕获)实时同步,指的是在数据源发生变化时,实时地捕获这些变化,并将其应用到目标系统中,从而保持数据的同步性。

