暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【用户投稿】10分钟带你深入理解Apache SeaTunnel与DataX的核心架构

SeaTunnel 2024-08-23
463

引言

本文主要以 图文 的形式来总结 DataX 和 SeaTunnel 的架构和代码流程,以方便读者去了解里面的源码。

DataX

首先来回顾DataX:

GitHub:https://github.com/alibaba/DataX

DataX架构

DataX的核心架构设计如下:

举个简单的例子去理解上图:用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的MySQL数据同步到ODPS里面。

DataX的调度决策思路如下

  • Step1:DataXJob
    根据分库分表切分成了100个Task
  • Step2:根据20个并发,DataX
    计算共需要分配4个TaskGroup
  • Step3:4个TaskGroup
    平分切分好的100个Task
    ,每一个TaskGroup
    负责以5个并发共计运行25个Task

DataX代码执行流程

《图解DataX任务分配及执行流程》:https://yanglinwei.blog.csdn.net/article/details/122968465

关于代码层面,贴上博主之前画过的一张代码执行流程图:

上图主要有几个核心的类,它们的职责主要如下(点击类即可查看源码):

职责
JobContainer任务容器
Reader读插件接口
Writer写插件接口
JobAssignUtil任务分配工具类
AbstractScheduler任务调度抽象类
TaskGroupContainer任务组容器

DataX存在的问题

首先说下DataX的优势,具体有如下:

  • 可靠的数据质量监控:如流量、数据量运行时监控以及脏数据检测等;
  • 丰富的数据转换功能:让数据在传输过程中可以轻松完成数据脱敏,补全,过滤等数据转换功能;
  • 精准的速度控制:可以控制作业速度,让作业在库可以承受的范围内达到最佳的同步速度;

同时开源版本的DataX也存在不足之处,例如:不支持集群(仅支持单机多线程模式完成同步作业运行),且不支持实时处理,(如:实时数据源Kafka和大数据生态系统中的组件Flink) 。

这个时候,Apache SeaTunnel 的出现,似乎弥补了DataX
的短板。

Apache SeaTunnel

SeaTunnel GitHub 地址:https://github.com/apache/seatunnel

Apache SeaTunnel对自己的定义如下:下一代高性能、分布式、海量数据集成框架。

ok,我们继续来看看它的相关功能特性。

SeaTunnel架构

这是Apache SeaTunnel官网贴出的简要的产品设计架构图:

上图似乎不能体现出整个 SeaTunnel 的核心流程要点,仅仅是产品的功能,对于读者来说,可能更看重的是SeaTunnel
是如何做到 分布式、海量数据集成 的设计?

下面继续查看相关核心类图如下(图片来源:https://mp.weixin.qq.com/s/Hvf7TJxMEBVyvnMXVd8E_w):

作者认为他们自研的SeaTunnel Engine
才是整个SeaTunnel的核心,它由三个主要的服务组成(点击类名可以查看对应的源码):

职责
CoordinatorServiceMaster
服务,负责Dag
的生成、Checkpoint
流程控制、资源管理以及作业指标统计与汇总
TaskExecutionServiceWorker
服务,作业中每个task
真正运行时环境
SlotService在集群每个节点上都会运行,主要负责节点上资源的划分、申请和回收

SeaTunnel代码执行流程

关于SeaTunnel的架构或者和代码执行流程,似乎官网并没有贴出对应的流程设计图。

为了方便读者的理解,博主整理了SeaTunnel 代码执行图,如下:

对于CMD命令层(入口),主要分为了以下几个命令:

  • seatunnel-cluster.sh:主要是用来启动SeaTunnel集群;

  • seatunnel.shSeaTunnel客户端,主要用于提交作业至SeaTunnel集群或停止集群中运行的作业等;

  • seatunnel-start-seatunnel-flink-x-connector-v2.sh:主要用于提交作业至Flink集群(注意执行脚本里面使用了eval
    命令,去执行从FlinkStarter控制台打印的flink脚本命令);

  • seatunnel-start-seatunnel-spark-x-connector-v2.sh:主要用于提交作业至Spark集群(注意执行脚本里面使用了eval
    命令,去执行从SparkStarter控制台打印的spark脚本命令)。


执行引擎分为了如下几种

引擎核心类描述
SeaTunnel(Zeta)推荐SeaTunnelServer分为Master和Worker,Master主要用于作业Dag生成、资源管理、指标统计等。Worker主要是执行具体的任务节点,每个Worker是根据SlotProfile的IP 地址是否为本机地址来判断是否执行,具体在(org.apache.seatunnel.engine.server.dag.physical.PhysicalVertex#deploy
FlinkSeaTunnelFlinkPluginExecutorProcessor类型分为Source、Sink、Transform,主要用于转义(Translation)SeaTunnel的配置为Flink可识别的配置,最后使用Flink的TableEnviorment去执行ETL任务
SparkSeaTunnelSpark跟Flink引擎的执行逻辑类似,PluginExecutorProcessor类型分为Source、Sink、Transform最后转义并执行ETL任务

结论

至此,本文大致讲解完了DataX以及SeaTunnel的架构与代码流程了。

本文也是作者阅读源码后的一些整理,仅代表个人的观点,可能存在局限性或不足之处,欢迎大家留言评论,同时也希望能帮助到大家,谢谢大家,本文完!







活动推荐

今晚直播,请及时预约加入“PMC对话标杆用户”技术访谈节目,聆听华润置地和中创新航的资深工程师分享SeaTunnel实践经验,探讨数据集成与处理的最佳实践!










同步Demo

 MySQL→Doris
MySQLCDC
MySQL→Hive
 HTTP → Doris 

新手入门

 SeaTunnel 让数据集成变得 So easy!  3 分钟入门指南
从 0 到 1 快速入门 Apache SeaTunnel 
初探 Apache SeaTunnel / 深入理解 Apache SeaTunnel

 MySQL 同步到 Hive / 从MySQL同步到StarRocks
通过 SeaTunnel 将数据写入 OSS-HDFS 
MySQL 到 Elasticsearch 实时同步解决方案

启动 SeaTunnel / 3 分钟部署 SeaTunnel Zeta 
 部署 Apache SeaTunnel 分布式集群
Apache SeaTunnel Web部署指南
基于Apache SeaTunnel构建CDC数据同步管道
【用户投稿】Apache SeaTunnel 2.3.3+Web 1.0.0版本安装部署
【安装部署】Apache SeaTunnel 和 Web快速安装详解
【保姆级教程】使用SeaTunnel同步Kafka的数据到ClickHouse
【数据同步】SeaTunnel初体验,5000字深入浅出带你用上Oracle-CDC

最佳实践

 OPPO 清风 天翼云 马蜂窝
孩子王 哔哩哔哩 唯品会
众安保险 兆原数通 亚信科技
映客 翼康济世

测试报告


 性能测试报告:SeaTunnel 批量同步数据比 GLUE 快 420%!
最新性能对比报告:SeaTunnel 是 Airbyte 30 倍!
比DataX快20%!SeaTunnel同步计算引擎性能测试全新发布
SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比


Apache SeaTunnel





Apache SeaTunnel 是一个分布式、高性能、易扩展、用于海量数据(离线&实时)同步和转化的数据集成平台


仓库地址: 
https://github.com/apache/seatunnel

网址:
https://seatunnel.apache.org/

Apache SeaTunnel 下载地址:
https://seatunnel.apache.org/download
衷心欢迎更多人加入!

我们相信,在「Community Over Code」(社区大于代码)、「Open and Cooperation」(开放协作)、「Meritocracy」(精英管理)、以及「多样性与共识决策」等 The Apache Way 的指引下,我们将迎来更加多元化和包容的社区生态,共建开源精神带来的技术进步!

我们诚邀各位有志于让本土开源立足全球的伙伴加入 SeaTunnel 贡献者大家庭,一起共建开源!

提交问题和建议:
https://github.com/apache/seatunnel/issues

贡献代码:
https://github.com/apache/seatunnel/pulls

订阅社区开发邮件列表 : 
dev-subscribe@seatunnel.apache.org

开发邮件列表:
dev@seatunnel.apache.org

加入 Slack:
https://join.slack.com/t/apacheseatunnel/shared_invite/zt-1kcxzyrxz-lKcF3BAyzHEmpcc4OSaCjQ

关注 Twitter: 
https://twitter.com/ASFSeaTunnel

文章转载自SeaTunnel,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论