赞
踩
各位同学好,很荣幸通过Apache SeaTunnel社区和大家进行分享交流。我是来自亚信科技的潘志宏,主要负责公司内部数据中台产品的开发。
本次分享的主题是Apache SeaTunnel在亚信科技的集成实践,具体讲我们的数据中台是如何集成SeaTunnel的。
在本次分享中,我将重点讲解以下几个方面:
首先介绍一下,我主要负责亚信数据中台产品DATAOS的迭代开发。DATAOS是一个比较标准的数据中台产品,涵盖数据集成、数据开发、数据治理、数据开放等功能模块。与SeaTunnel相关的主要是数据集成模块,该模块主要负责数据的整合。
在引入SeaTunnel之前,我们的数据集成模块的功能架构如下:
在我们的数据集成模块中,整体架构分为三层,分别是数据集成前台、调度平台以及数据集成服务。
下面是每一层的详细描述:
数据集成前台主要负责数据集成任务的管理。具体包括任务的开发、调度开发和运行监控。这些任务通过DAG(有向无环图)的方式将各个集成算子组合起来,实现复杂的数据处理流程。前台界面提供了直观的任务管理界面,使得用户可以方便地配置、监控数据集成任务。
调度平台负责任务运行的调度管理。它支持批处理和流处理两种模式,并能够根据任务的依赖关系和调度策略拉起相应的任务。
数据集成服务是整个数据中心服务的核心,它提供了一系列关键功能:
数据集成服务还负责任务的具体运行。由于我们的采集任务可能包含多个引擎,这就需要在任务运行时实现多引擎的协调和调度。
任务的运行主要包括以下几个步骤:
同时为了使DataX这种单机运行的任务能够更好地分布式运行,并实现资源复用,我们对DataX任务进行了资源分配的优化:
我们对每个执行引擎实现了相应的任务执行代理,以实现任务的统一管理和监控:
我们集成了一些开源项目,如DataX、Spark、Flink CDC、Filebeat等,形成了一个功能强大的数据集成服务平台。但也面临一些问题:
为了优化架构并降低复杂度,我们对现有架构进行了演进:
通过对架构的优化和演进,我们成功地解决了DataX单机运行限制和多技术栈带来的高研发成本问题。
引入SeaTunnel后,我们能够在一个平台上实现多种数据处理功能,同时简化了资源管理和任务调度,提高了系统的整体效率和稳定性。
我们与 SeaTunnel 的接触可以追溯到Waterdrop时期,针对于Waterdrop进行过多次应用实践。
去年,SeaTunnel 推出了 Zeta 引擎,支持分布式架构,并成为 Apache 顶级项目,这使得我们在去年找到了一个合适的时间节点,进行了深入的调研,并决定引入 SeaTunnel。
以下是我们选择 SeaTunnel 的几个主要原因:
SeaTunnel 能够解决我们之前提到的两个主要问题:
在集成 SeaTunnel 之前,我们的旧架构已经存在并运行了一段时间,整体上分为三层:前台、调度平台以及数据集成服务。前台负责任务的管理与开发,调度平台负责任务的调度与依赖管理,而数据集成服务则是执行和管理所有数据集成任务的核心部分。
以下是我们在集成 SeaTunnel 后的新架构。
首先,我们将旧架构中涉及 DataX 的资源分配部分取消了。由于 SeaTunnel 本身支持分布式架构,不再需要额外的资源分配管理。这一调整极大地简化了我们的架构。
我们逐步使用 SeaTunnel 替换了旧有的技术栈。具体步骤如下:
我们基于 SeaTunnel 的 Connector 进行了组件化设计,并在前台通过表单方式进行配置和 DAG 编排。虽然 SeaTunnel Web 也在进行类似的工作,但我们根据自身需求进行了定制化开发,以便更好地与现有系统集成。
在任务运行代理方面,我们通过 SeaTunnel 客户端提交任务,并监听 SeaTunnel 客户端的状态和执行日志。通过解析这些日志,我们可以获取任务的执行状态信息,确保任务执行的可监控性和可追踪性。
我们支持多引擎混编开发,在前台页面可以对一个调度任务进行多引擎的 DAG 编排。这样,我们可以在一个调度任务中同时使用不同的引擎(如 SQL 引擎和 DP 引擎)进行任务开发,提高系统的灵活性和扩展性。
在集成 SeaTunnel 的过程中,我们遇到了一些问题,以下是几个具有代表性的问题及其解决方案:
在使用 SeaTunnel 的过程中,我们遇到了一些报错,这些报错涉及到框架的代码。由于官方文档中没有相关说明,我们通过加入社区微信群,向群内的开发者求助,及时解决了问题。
我们的旧采集任务是使用 DataX 实现的,在替换为 SeaTunnel 时,需要考虑任务的割接问题。
我们通过以下方案进行解决:
我们在使用 SeaTunnel 的过程中遇到了版本管理的问题。SeaTunnel 的更新频繁,而我们团队的二开版本需要持续跟进最新版本。以下是我们的解决方案:
本地分支管理:我们基于 SeaTunnel 2.3.2 版本拉了一个本地分支,对其进行二次开发,包括修复个性化需求和临时修复的 bug。为了尽量减少本地维护的代码,我们仅保留必要的改动,其他部分尽量使用社区的最新版本。
定期合并社区更新:我们定期将社区的新版本合并到本地分支,特别是对我们改动的部分进行更新和兼容。虽然这种方法比较笨拙,但可以保证我们及时跟进社区的最新功能和修复。
回馈社区:为了更好地管理和维护代码,我们计划将我们的一些改动和个性化需求提交给社区,争取社区的接纳和支持。这不仅有助于减少我们本地的维护工作,也有助于社区的共同发展。
在 SeaTunnel 的使用过程中,我们针对实际业务需求进行了多项二次开发,特别是在连接器(Connector)层面。以下是我们在二次开发中遇到的问题及解决方案。
Hive Connector 的改造
瀚高数据库的支持
文件连接器的改造
在使用 SeaTunnel 的过程中,我们深入了解了其二段提交机制,以确保数据的一致性。以下是我们在此过程中遇到的问题及解决方案:
问题描述:在使用 FTP 和 SFTP 进行文件写入时,报错提示没有写入权限。排查发现,SeaTunnel 为了保证数据一致性,会先将文件写入临时目录,然后再进行移动。
然而,由于不同账号对临时目录的权限设置问题,导致写入失败。
解决方案:在创建临时目录时,设置更大的权限(如 777),以确保所有账号都有权限写入。同时,解决了文件移动过程中由于跨文件系统导致的 rename 命令失败的问题,通过在同一文件系统下创建临时目录,避免了跨文件系统操作。
在二次开发过程中,我们面临着如何管理和同步 SeaTunnel 新版本的问题。我们的解决方案如下:
在集成 SeaTunnel 过程中,我们主要关注以下几点:
通过以上步骤和策略,我们成功地将 SeaTunnel 集成到我们的数据集成服务中,解决了旧有系统中的一些关键问题,优化了系统的性能和稳定性。
在这个过程中,我们积极参与社区,寻求帮助并反馈问题,确保集成工作的顺利进行。这种积极的互动不仅提高了我们的技术水平,也推动了 SeaTunnel 社区的发展。
在参与 SeaTunnel 的过程中,我有以下几点体会:
对于那些一直想参与开源社区但还没有迈出第一步的人,我想鼓励大家勇敢地迈出这一步。社区最重要的是人,只要你加入,你就是社区中不可或缺的一部分。
最后,我想分享一下对 SeaTunnel 的一些期待:
感谢 SeaTunnel 社区的每一位成员,感谢你们的付出。我的分享就到这里,谢谢大家!
本文由 白鲸开源科技 提供发布支持!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。