深入理解DataX与SeaTunnel的核心架构

打印 上一主题 下一主题

主题 1019|帖子 1019|积分 3057

1. 引言

本文主要以 图文 的形式来总结 DataX 和 SeaTunnel 的架构和代码流程,以方便读者去相识内里的源码。首先往返顾DataX。
2. DataX

   GitHub:https://github.com/alibaba/DataX
  博主之前曾经写过相关的专栏《DataX专栏》,有兴趣的同学可以阅读下:


  • 《DataX教程(01)- 入门》
  • 《DataX教程(02)- IDEA运行DataX完整流程(填完全部的坑)》
  • 《DataX教程(03)- 源码解读(超详细版)》
  • 《DataX教程(04)- 配置完整解读》
  • 《DataX教程(05)- DataX Web项目实践》
  • 《DataX教程(06)- DataX调优》
  • 《DataX教程(07)- 图解DataX使命分配及实行流程》
  • 《DataX教程(08)- 监控与汇报》
  • 《DataX教程(09)- DataX是怎样做到限速的?》
  • 《DataX教程(10)- DataX插件热插拔原理》
2.1 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。
2.2 DataX代码实行流程

   《图解DataX使命分配及实行流程》:https://yanglinwei.blog.csdn.net/article/details/122968465
  关于代码层面,贴上博主之前画过的一张代码实行流程图:

上图主要有几个核心的类,它们的职责主要如下(点击类即可检察源码):
类职责JobContainer使命容器Reader读插件接口Writer写插件接口JobAssignUtil使命分配工具类AbstractScheduler使命调理抽象类TaskGroupContainer使命组容器 2.3 DataX存在的问题

首先说下DataX的优势,详细有如下:


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

同时开源版本的DataX也存在不敷之处,例如: 不支持集群(仅支持单机多线程模式完成同步作业运行),且不支持实时处理,(如:实时数据源Kafka和大数据生态体系中的组件Flink) 。这个时间,SeaTunnel 的出现,似乎弥补了DataX的短板。
当然,实时这块也可以参考 Chunjun(FlinkX),有兴趣的可以参考之前写过的一篇文章《深度分析FlinkX(纯钧)源码》
3. SeaTunnel

   SeaTunnel:https://github.com/apache/seatunnel
  SeaTunnel对自己的定义如下:下一代高性能、分布式、海量数据集成框架

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

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

上图似乎不能体现出整个 SeaTunnel 的核心流程要点,仅仅是产品的功能,对于读者来说,可能更看重的是SeaTunnel是怎样做到 分布式、海量数据集成 的设计?
下面继续检察相关核心类图如下(图片来源:https://mp.weixin.qq.com/s/Hvf7TJxMEBVyvnMXVd8E_w):

博主认为他们自研的SeaTunnel Engine才是整个SeaTunnel的核心,它由三个主要的服务组成(点击类名可以检察对应的源码):
类职责CoordinatorServiceMaster 服务,负责Dag的天生、Checkpoint 流程控制、资源管理以及作业指标统计与汇总TaskExecutionServiceWorker服务,作业中每个task真正运行时环境SlotService在集群每个节点上都会运行,主要负责节点上资源的分别、申请和回收 3.2 SeaTunnel代码实行流程

关于SeaTunnel的架构大概和代码实行流程,似乎官网并没有贴出对应的流程设计图。
为了方便读者的理解,博主整理了SeaTunnel 代码实行图,如下:

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


  • seatunnel-cluster.sh:主要是用来启动SeaTunnel集群;
  • seatunnel.sh:SeaTunnel客户端,主要用于提交作业至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使命 4. 文末

   我们会发现很多项目的设计,都是存在共同之处的,或在其它项目都有类似的设计,比如阅读了SeaTunnel的代码,会发现有TaskGroup/Slot/ResourceManager(或许参考了DataX或Flink)、Master/Worker(或许参考了DolphinScheduler,固然现在没有拆分)、Connector(或许参考了Chunjun或Flink)等等…
  至此,本文大致讲解完了DataX以及SeaTunnel的架构与代码流程了。本文也是博主阅读源码后的一些整理,仅代表个人的观点,可能存在范围性或不敷之处,接待各人留言评论,同时也希望能资助到各人,谢谢各人,本文完!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表