在万物数联的时代,数据已经成为了企业和行业发展的重要内驱力。本文梳理了近年来数据集成的演变与发展历程,聚焦当前主流EtLT技术,结合亚信科技自身产品特性,对Apache SeaTunnel数据集成框架进行了深入介绍,希望能为相关从业者与学者带来启发与思考。
由上表可见,随着湖仓一体、人工智能、大语言模型的到来,数据集成框架已经由传统的ETL、ELT演变为了EtLT。区别于ELT,EtLT在EL过程中增加了小t,即将提取的数据首先进行标准化处理,包括如格式转换、字段规范化等操作。小t过程仅做数据的简单预处理,目的是形成较为规范的、具有一定数据质量可靠性的数据;L(Load)则是将标准化后的数据加载到目标数据存储层,最后的大T(Transform)则是依赖于数据分析人员,通过SQL/HSQL实现数据业务逻辑的加工,将数据实时/批量构建成企业业务侧所需要的数据资产。此外,EtLT的数据集成的分步走,将数据处理工程师(EtL过程)与数据开发工程师(T过程)区分开,提高企业数据接入、处理、开发的流程规范性和效率。
上述特性能够很好地解决当下企业对批流数据一体化处理需求。其适用场景也从以往的数据库批处理到兼容支持混合云、SaaS、批流数据源混合等数据处理场景。当下EtLT已逐渐成为数据集成框架的主流技术,而其典型代表为Apache SeaTunnel。亚信科技数据中台产品具备对多源批流数据集成的能力,进一步基于当前主流技术框架,对Apache SeaTuunel进行了应用探索。
Apache SeaTunnel是一个非常易于使用、超高性能的分布式开源数据集成平台,支持大规模数据的实时同步。它每天能够稳定高效地同步数百亿条数据,并且已经被近100家公司在生产环境中使用。其核心的运行流程如下图所示:用户自由配置任务信息并选择提交任务的执行引擎,Source连接器将负责并行读取数据并将数据发送到下游Transform连接器或直接发送到Sink连接器,Sink连接器将数据写入目标端。在此过程中,Source、Transform以及Sink连接器可进行开发和扩展。
图1:Apache SeaTunnel工作流
1.支持连接器多
目前SeaTunnel已经支持100+的连接器数量,包括Source和Sink的连接器,例如ClickHouse、ClickHouseFile、Doris、Transform等,且连接器还在不断扩增中。
2.支持批流一体
针对同一个连接器,可通过单套代码,根据配置即可实现批处理或流处理的模式进行同步处理。流处理的方式中既支持以Flink为代表的纯流,也兼容了以Spark为代表的微批的方式。
3.多引擎支持
SeaTunnel支持多个版本的Flink引擎、Spark引擎以及其自身为数据同步专设的SeaTunnel引擎(Zeta)。多引擎的支持可更好兼容企业现有的技术栈,降低企业引入SeaTunnel的技术成本。
4.高性能和一致性
SeaTunnel所有的连接器都支持并行化处理,可提高整个数据同步的吞吐量;其次,其支持分布式快照的算法,在连接器内部实现了两阶段提交和幂等写入,保证数据只会处理一次,确保了数据的精确性;此外,借助实时处理和微批处理的特性,SeaTunnel又可实现数据低延迟。
基于SeaTunnel的上述众多优秀的能力,亚信科技数据中台团队引入了SeaTunnel数据集成框架,并结合自身产品特点,进行了二次开发探索与应用实现,扩展和延伸了既往数据集成工具的高可用性,满足了更多复杂的数据集成场景。
(一)SeaTunnel的集成目标
亚信科技数据中台AISWare DataOS(以下简称DataOS)是涵盖多源数据集成、数据开发、数据治理和数据开放等为一体的标准化、智能化的数据中台产品,具备强大且完备的数据采集与处理能力。其中,数据集成模块中,囊括了批采和流采两大部分内容。如下图所示。
图2:数据集成功能模块组成
• 库表采集:主要使用DataX实现。
• 文件采集:依托于自研的DP引擎。
• lETLt采集:自研的ETLt采集引擎。DataX偏向于ELT(抽取、加载、转换),适用于数据抽取入库后再进行复杂的转换,但在某些场景下需要进行EL小t(抽取、加载、简单的转换),DataX并不适合。因此,研发团队基于SparkSQL自研了一个引擎。
日志采集主要基于Filebeat,CDC采集主要基于Flink CDC。
可见,在上述架构中,批采与流采分离,兼容着不同的技术架构,且随着产品不断地迭代,产品持续集成了更多开源项目,如DataX、Spark、Flink CDC、Filebeat等,虽然逐步构建了一个功能完善的数据集成服务平台,但也随之带来了一些问题:
• 单机运行限制:DataX只支持单机运行,这导致DataOS产品需要在其基础上自行实现分布式调度功能,增加了系统的复杂度。
• 技术栈过于多样化:产品自身引入了多个技术栈(如DataX、Spark和FlinkCDC等),虽然功能丰富,但也导致研发成本较高,在新功能迭代时需要应对多个技术栈的兼容性和集成问题。
为解决上述问题,DataOS研发团队引入了Apache SeaTunnel引擎,在引入时,为了充分利用其高可用和高兼容性能力,团队主要在资源分配、技术栈替换、组件化SeaTunnel Connector、日志监听、多引擎混编开发适配等方面进行了应用探索与实践。
(二)SeaTunnel的实践内容
1. 取消资源分配
3. 组件化SeaTunnel Connector
为SeaTunnel更好地适配DataOS系统的重要功能需求,从业务视角出发,团队基于SeaTunnel的Connector进行组件化设计和定制化开发,并在前台通过表单方式进行配置和可视化DAG组件编排,使得基于SeaTunnel引擎的数据集成能力在DataOS系统中更具有可读性和易用性。
图3:组件化SeaTunnel Connector构建数据集成编排
4. SeaTunnel日志监听适配
SeaTunnel支持数据集成和同步过程中每一步信息的详细监控,故通过SeaTunnel客户端提交任务后,可对SeaTunnel客户端的状态和执行日志进行监听和解析,进一步详尽分析出任务的执行状态、数据量大小、QPS等信息,完善数据集成任务的各项监控指标,便于实施人员和运维人员全面了解任务信息,实现任务的可追踪性。
5. 引擎混编开发能力适配
SeaTunnel框架支持多引擎混编开发,即在前台页面可以对一个调度任务进行多引擎的DAG编排。团队对此特性进行了集成与适配,使得DataOS数据集成模块可在一个调度任务中同时使用不同的引擎(如SQL引擎和DP引擎)实现任务开发,提高了整体数据集成模块的灵活性和扩展性。
(三)SeaTunnel的二开优化
在SeaTunnel集成、使用和二次开发过程中,除了上述的实践成果,同时面临了一些技术(特别是在连接器(Connector)层面)与管理的挑战。通过团队的精研与探索,总结出了部分实践经验。
图4:基于SeaTunnel集群的二开及优化内容
1. HiveConnector的改造优化
2. 文件连接器的改造优化
文件系统连接器在数据集成模块的使用中占有重要地位,团队根据实际使用需求对其进行了多项改造,以适配非结构化数据的集成与处理需求:
• HDFS Connector:增加了目录递归和正则表达式扫描文件的功能,同时支持读取和写入多种文件格式(如RC、Sequence、XML、JSON)。
• FTP和SFTP Connector:修复I/O泄露的BUG,优化连接缓存机制,确保同一IP不同账号之间的独立性。
3. 瀚高数据库的支持优化
瀚高数据库作为代表性的国产化数据库,在众多项目中均有广泛应用。SeaTunnel中尚未提供针对于瀚高数据库的读写能力,因此团队增加了对瀚高数据库的数据源读写支持。此外,还需针对瀚高数据库的一些特殊需求,开发转换组件:
• 支持行转列、列转行等复杂转换操作。
• 编写多种UDF(用户自定义函数),用于数据脱敏等操作。
4. 二段提交机制的提交优化
问题描述:在使用FTP和SFTP进行文件写入时,报错提示没有写入权限。排查发现,SeaTunnel为了保证数据一致性,会先将文件写入临时目录,然后再进行移动。然而,不同账号对临时目录的权限设置不一致,最终将导致写入失败。
解决方案:在创建临时目录时,需要设置更大的权限(如777),以确保所有账号都有权限写入。同时,通过在同一文件系统下创建临时目录,避免了跨文件系统操作,也可解决文件移动过程中由于跨文件系统导致的rename命令失败的问题。
图5:FTP/SFTP写二段提交优化1
问题描述:在使用FTP和SFTP进行文件写入时,报错提示文件移动失败。
解决方案:数据正式提交时,需要将文件从/tmp/目录移动到目标目录,sftp\ftp用的rename命令进行文件移动。但SeaTunnel不支持源文件和目标文件跨文件系统时使用rename,需要保证tmp文件目录和目标文件目录在同一个文件系统下,最终解决方案是将tmp文件放到目标文件目录下。
图6:FTP/SFTP写二段提交优化2
5. DataX框架下任务割接处理
DataOS中已有DataX的任务,在引入SeaTunnel后,需考虑前后任务割接的问题。经团队实践,DataX框架任务割接至SeaTunnel框架下解决方案包括如下两种:
• 相似的JSON文件生成:DataOS产品数据集成任务是组件化设计,前台的组件和后台的执行引擎之间有一层转换层。因此可前台配置表单,后台通过转换层生成DataX需要执行的JSON文件。SeaTunnel的配置与DataX类似,前台同样可通过表单配置,后台生成SeaTunnel需要执行的JSON文件。因此,通过相随的JSON文件生成方式,能够无缝地将旧任务转移到新的SeaTunnel平台上,确保任务的平滑过渡。
• SQL脚本转换:开发人员编写SQL脚本,对旧有的DataX任务进行清洗和转换,使其能够适配SeaTunnel。这种方法更具灵活性和适应性,由于SeaTunnel会频繁更新,直接写硬编码进行兼容不是长久之计,而通过该脚本转换方式,可以更高效地迁移任务,适应SeaTunnel的更新。
6. 二次开发版本管理问题处理
解决方案:
• 本地分支管理:基于SeaTunnel当前使用的版本拉了一个本地分支;
• 定期合并社区更新:定期将社区的新版本合并到本地分支,确保开发团队能够及时获得社区的新功能和修复。
• 回馈社区:定期将开发团队的一些改动和个性化需求提交给社区,以期获得社区的接纳和支持,从而减少本地维护的工作量。
当前AISWare DataOS已通过引入SeaTunnel,成功实现了架构的演进和优化,提升了产品在数据集成的整体效率和可靠性:
• 整合多引擎功能:统一了多个引擎的功能,实现单一平台上的多种数据处理能力,同时引擎能力的组件化,降低了业务人员使用门槛。
• 简化资源管理:通过SeaTunnel的资源管理功能,简化了DataX等单机任务的分布式调度,降低了资源分配和管理的复杂度,提升了系统任务执行效率与稳定性。
• 降低研发与运维成本:通过统一的架构和接口设计,减少了多技术栈带来的技术人员的开发成本和运维人员的维护成本,提高了系统的可扩展性和易维护性。
图7:数据集成架构演进成果
各行业数据指数级激增,对于各类复杂场景下的数据采集、转换、处理需求也将不断扩增,尤其是对混合云下多源数据的兼容性、数据集成算法和效率、自动化批流一体等处理场景等提出了更高的要求,EtLT架构成为了数据集成的主流技术。随着大语言模型、AI智能化的技术不断更迭,逐步涌现了更多更复杂的数据集成场景,部分数据治理领头厂商也提出了更新的数据集成架构,如Zero ETL、DataFabric和数据虚拟化等。
在信息化爆炸的时代,随着数据的不断扩张,国家政策的不断推进,市场对数据集成的价值认知也在不断提升,数据集成越来越得到重视,其正处于快速发展但又充满挑战的时期。无论技术架构如何演变,相信终将实现创新和突破。
[1]SeaTunnel.关于SeaTunnel [EB/OL].2024.