欢迎来到【深度商店源码】【动态心形源码】【备课系统 网站源码】flink内核源码_flink 源码-皮皮网网站!!!

皮皮网

【深度商店源码】【动态心形源码】【备课系统 网站源码】flink内核源码_flink 源码-皮皮网 扫描左侧二维码访问本站手机端

【深度商店源码】【动态心形源码】【备课系统 网站源码】flink内核源码_flink 源码

2024-12-22 22:15:51 来源:{typename type="name"/} 分类:{typename type="name"/}

1.SeaTunnel连接器V1到V2的核源架构演进与探究

flink内核源码_flink 源码

SeaTunnel连接器V1到V2的架构演进与探究

       核心概念

       SeaTunnel设计的核心是利用设计模式中的控制翻转或依赖注入,主要包括以下两点:

       数据处理过程大致分为输入 -> 转换 -> 输出,源码更复杂的核源数据处理实质上也是这些行为的组合。

       内核原理

       SeaTunnel将数据处理的源码各种行为抽象成Plugin,并使用SPI技术进行动态注册,核源设计思路保证了框架的源码深度商店源码灵活扩展。在以上理论基础上,核源数据的源码转换与处理还需要做统一的抽象,如著名的核源异构数据源同步工具DataX,也对数据单条记录做了统一抽象。源码

       SeaTunnel V1架构体系中,核源由于背靠Spark和Flink两大分布式计算框架,源码框架已经为我们做好了数据源抽象的核源工作,Flink的源码动态心形源码DataStream、Spark的核源DataFrame已经是对接入数据源的高度抽象。在此基础上,我们只需要在插件中处理这些数据抽象即可。同时,借助Flink和Spark提供的SQL接口,还可以将每次处理完的数据注册成表,方便用SQL进行处理,减少代码的开发量。

       实际上,SeaTunnel的最终目的是自动生成一个Spark或Flink作业,并提交到集群中运行。

       SeaTunnel连接器V1 API解析架构概览

       目前在项目dev分支下,SeaTunnel连接器V1 API所在的备课系统 网站源码模块如图所示:

       seatunnel-api-base

       在基础模块中,有以下代码:

       为了更清晰地理解这些类之间的关系,笔者制作了一张简单的UML类图:

       整个API的组成可以大体分为三部分:构建层接收命令参数构建执行器,执行器初始化上下文,上下文注册插件并启动插件,至此,整个作业开始运行。

       seatunnel-api-spark

       在Spark引擎API层有以下代码:

       同样,笔者整理了一张UML类图来表示它们之间的关系:

       整个流程与Base模块一致,在此不再赘述,有兴趣的读者可以自行查看源码。

       seatunnel-api-flink

       在Flink引擎API层有以下代码:

       同样,笔者整理了一张UML类图来表示它们之间的关系:

       整个流程与Base模块一致,在此不再赘述,eclipse连接不到源码有兴趣的读者可以自行查看源码。

       SeaTunnel连接器V1运行原理启动器模块概览

       整个项目的最外层启动类都放在以下模块中:

       与连接器V1有关的模块如下:

       执行流程

       为了更好地理解SeaTunnel V1的启动流程,笔者制作了一张简单的时序图:

       程序最外层的启动由start-seatunnel-${ engine}.sh开始,用户将配置文件从脚本传入,脚本调用org.apache.seatunnel.core.spark.SparkStarter或org.apache.seatunnel.core.flink.FlinkStarter。实际上,这个类只做一个工作:将所有参数拼接成spark-submit或flink命令,然后脚本接收spark-submit或flink命令并提交到集群中。提交到集群中真正执行job的类实际上是org.apache.seatunnel.spark.SeatunnelSpark或org.apache.seatunnel.flink.SeatunnelFlink。读者如果想直接深入了解作业启动核心流程的话,推荐阅读这两个类的源码。

       执行原理SparkFlinkSeaTunnel连接器V2 API解析架构概览

       目前在项目dev分支下,SeaTunnel连接器V2 API所在的窗口是否存在源码模块如图所示:

       数据抽象

       SeaTunnel连接器V2 API在数据层面做了抽象,定义了自己的数据类型,这是与连接器V1最大的不同点。连接器V1使用的是引擎数据抽象的能力,但连接器V2自己提供了这个异构数据源统一的能力。

       在所有的Source连接器和Sink连接器中,处理的都是SeaTunnelRow类型数据,同时SeaTunnel也对内设置了数据类型规范。所有通过Source接入进来的数据会被对应的连接器转化为SeaTunnelRow送到下游。

       API Common

       在API common包下有以下接口的定义:

       在这里,由于篇幅关系,只介绍比较核心的几个接口:

       具体接口中有哪些方法,读者可以自行阅读对应类的源码,在此不再赘述。

       API Source

       在API source包下有以下接口的定义:

       在这里,由于篇幅关系,只介绍比较核心的几个接口:

       API Sink

       在API sink包下有以下接口的定义:

       在这里,由于篇幅关系,只介绍比较核心的几个接口:

       小结

       连接器V2在架构分层上与计算引擎进行解耦,定义了自己的元数据定义以及数据类型定义,在API层和计算引擎层增加了翻译层,将SeaTunnel自定义的数据源通过翻译层接入到引擎中,从而真正实现接口和引擎分离的目的。

       SeaTunnel连接器V2运行原理启动器模块概览

       整个项目的最外层启动类都放在以下模块中:

       与连接器V2有关的模块如下:

       执行流程

       为了更好地理解SeaTunnel V2的启动流程,笔者制作了一张简单的时序图:

       程序最外层的启动由start-seatunnel-${ engine}-new-connector.sh开始,用户根据将配置文件从脚本传入,脚本调用org.apache.seatunnel.core.spark.SparkStarter或org.apache.seatunnel.core.flink.FlinkStarter。实际上,这个类只做一个工作:将所有参数拼接成spark-submit或flink命令,然后脚本接收spark-submit或flink命令并提交到集群中。提交到集群中真正执行job的类实际上是org.apache.seatunnel.spark.SeatunnelSpark或org.apache.seatunnel.flink.SeatunnelFlink。读者如果想直接深入了解作业启动核心流程的话,推荐阅读这两个类的源码,连接器V2和连接器V1的启动流程基本一致。

       SeaTunnel V2 on Spark

       SeaTunnel Source连接器V2将异构数据源接入,生成以SeaTunnelRow为基本单位的数据源,在翻译层实现了Spark DataSource API V2,翻译层使得Spark可以接入以SeaTunnelRow为基本单位的数据源,从而实现无缝接入Spark的目的。

       关于Spark DataSource API V2的详细信息,读者可以参考:/session/apache-spark-data-source-v2。由于这篇文章的主题并不是介绍Spark的特性,所以在此不再赘述。

       SeaTunnel V2 on Flink

       SeaTunnel Source连接器V2将异构数据源接入,生成以SeaTunnelRow为基本单位的数据源,同时在翻译层实现了Flink source function和Flink sink function。翻译层使得Flink可以接入以SeaTunnelRow为基本单位的数据源,从而实现无缝接入Flink的目的。

       关于Flink source Function和Flink sink function的详细信息,读者可以参考:https://nightlies.apache.org/flink/flink-docs-release-1./docs/dev/datastream/sources/#the-data-source-api。由于这篇文章的主题并不是介绍Flink的特性,所以在此不再赘述。

       执行原理

       Source连接器接入数据源为SeaTunnelRow,Translation层转换SeaTunnelRow数据源为各种计算引擎内部的数据源,Sink连接器接收计算引擎内部转换好的SeaTunnelRow数据源并写入到目标数据源中。

       V1 API vs V2 API未来展望

       目前社区正在做的事情:

       未来目标:

       最终目标:成功从Apache孵化器毕业,成为世界一流的诞生于中国的数据集成平台工具

       贡献者招募

       目前社区正在蓬勃向前发展,大量feature需要去开发实现,毕业之路道阻且艰,期待更多的有志之士参与到社区共建,欢迎热爱开源的小伙伴加入SeaTunnel社区,有意者可发邮件至tyrantlucifer@apache.org或微信tyrantlucifer联系我咨询相关事宜,让我们一起用开源点燃璀璨的程序人生。

       成数据集成任务 3. 更多调度平台无缝接入

       最终目标:成功从Apache孵化器毕业,成为世界一流的诞生于中国的数据集成平台工具

       贡献者招募

       目前社区正在蓬勃向前发展,大量feature需要去开发实现,毕业之路道阻且艰,期待更多的有志之士参与到社区共建,欢迎热爱开源的小伙伴加入SeaTunnel社区,有意者可发邮件至tyrantlucifer@apache.org或微信tyrantlucifer联系我咨询相关事宜,让我们一起用开源点燃璀璨的程序人生。