
Zeta Engine 是一个专门为数据同步场景设计和开发的数据同步引擎,更快、更稳定、更省资源也更加易用。Zeta Engine 是一个专门为数据同步场景设计和开发的数据同步引擎,更快、更稳定、更省资源也更加易用,在全球多种开源同步引擎测试比对情况下,Zeta 性能都遥遥领先。SeaTunnel Zeta 引擎,经历了数个研发版本,于 2022 年十月发布 beta 版本,经过社区讨论决定,将其命名为 Zeta(宇宙中最快的星,社区同学认为这充分体现了该引擎的特性),其特性包括:
- 简单易用,新的引擎尽量减小第三方服务的依赖,可以不依赖 Zookeeper、HDFS 等大数据组件实现集群管理、快照存储和集群 HA 功能。这对于那些没有大数据平台或者不愿意依赖大数据平台进行数据同步的用户非常有用。
- 更省资源,在 CPU 层面,Zeta Engine 内部使用 Dynamic Thread Sharing(动态线程共享)技术 ,在实时同步的场景下,如果表的数量很多但每张表的数据量又很小,Zeta Engine 会将这些同步任务在共享线程中运行,这种方式可以减少不必要的线程创建,节省系统资源。在读取和数据写入端,Zeta Engine 的设计目标是尽量减少 JDBC 连接的数量。在 CDC 场景下,Zeta Engine 会尽量复用日志读取解析资源。
- 更稳定,在此版本中,Zeta Engine 将数据同步的任务以 Pipeline 作为 Checkpoint 和容错的最小粒度,一个 task 的失败只会影响到和它有上下游关系的 task,尽量避免 task 失败造成整个 Job 失败或回滚。同时,对于源端数据有存储时间限制的场景,Zeta Engine 支持开启数据 Cache,自动缓存从源端读取的数据,再由下游任务读取缓存数据并写入目标端。此场景下,即使目标端出现故障导致数据无法写入,也不会影响源端的正常读取,防止源端数据过期被删除。
- 更快速,Zeta Engine 的执行计划优化器会以减小数据可能的网络传输为目标来做执行计划的优化,从而降低数据序列化和反序列化带来的整体同步性能的损耗,更快地完成数据同步操作。当然,它还支持速度限制,让同步作业以一个合理的速度进行。
- 全场景数据同步支持,SeaTunnel 的目标是支持离线批量同步下的全量同步和增量同步,支持实时同步以及 CDC。
Zeta Ophiuchi (ζ Oph) 是一颗炽热的蓝色亚巨星,距离我们 366 光年,位于蛇夫座。它的视星等为 2.57,是星座中第三亮的恒星,仅次于 Rasalhague 和 Sabik。Zeta Ophiuchi 是距离太阳最近的 O 型恒星。它是勾勒出天运蛇的多边形星座图的明亮恒星之一。Zeta Ophiuchi 是一个异常快速的旋转器,预计旋转速度高达 400 公里/秒。我们的旅程是星辰大海,而 SeaTunnel 引擎 (zeta) 就是星辰。就一个字:快,也是引擎最大的特点。
TaskExecutionService 是一个执行任务的服务,将在每个节点上运行一个实例。它从 JobMaster 接收 TaskGroup 并在其中运行 Task。并维护TaskID->TaskContext,对Task的具体操作都封装在TaskContext中。而Task内部持有OperationService,也就是说Task可以通过OperationService远程调用其他Task或JobMaster进行通信。CoordinatorService是一个充当协调器的服务,它主要负责处理客户端提交的命令以及切换master后任务的恢复。客户端在提交任务时会找到master节点并将任务提交到CoordinatorService服务上,CoordinatorService会缓存任务信息并等待任务执行结束。当任务结束后再对任务进行归档处理。SlotService是slot管理服务,用于管理集群的可用Slot资源。SlotService运行在所有节点上并定期向master上报资源信息。第一步:jobconf转换为LogicDag
我们通过job的配置文件定义job流程,因此 SeaTunnelClient 需要做的第一件事是解析job配置文件并生成action列表。action 类似于 Flink 中的 operator,是对 SeaTunnel API 的封装。一个action包含 SeaTunnelSource 或 SeaTunnelTransform 或 SeaTunnelSink 的实例。每个action都需要知道它自己的上游。public interface Action extends Serializable {
@NonNull String getName();
void setName(@NonNull String name);
@NonNull List<Action> getUpstream();
void addUpstream(@NonNull Action action);
int getParallelism();
void setParallelism(int parallelism);
long getId();
Set<URL> getJarUrls();
}
目前支持 SourceAction 、SinkAction 和 TransformAction 三种类型的action。如果只有一个 Source和一个Sink,和多一个 Transform,我们只需要简单解析如下:如果有多个source或多个transform或多个sink,我们将依赖 source_table_name 和 result_table_name 来构建action pipeline。因此,在这种情况下,result_table_name对于source action是必需的,而所有result_table_name 和 source_table_name对于transform action都是必需的。最后,source_table_name 是 sink action必需的。第二步:LogicPlan转换成PhysicalPlan
SeaTunnel引擎会收到客户端发送过来的逻辑计划,引擎需要将其转化为可以直接执行的物理计划。因此,需要对逻辑执行计划进行处理,通过转换生成物理计划。具体过程如下:收到逻辑计划,我们需要去除多余的Actions,并验证Schema(Transform2和Transform 5应该是一样的)(1)Transforms需要合并,合并的依据是Transform后数据是否会被拆分(如果没有shuffle则会将transform合并)。我们将Pipeline按照并行度拆分成单独的可执行任务,并且同时需要添加SourceSplitEnumerator和SinkAggregatedCommitter任务,可以将任务发送到executionService。然后任务就可以正常运行了。第三步:将taskGroup调度到指定node上等待运行在master节点上将physicalPlan拆分成pipeline并将pipeline拆分成taskGroup分别调度到不同节点上进行执行。- physicalPlan:用户提交的job被解析成可以运行的执行计划。
- pipeline:在pipeline中的任务只有pipeline的上游和下游算子,不同pipeline没有相关联的算子。
- taskGroup:每一个执行计划顶点将会创建一个taskGroup,一个taskGroup包含一个或者多个task,每一个taskGroup需要一个单位的计算资源。taskGroup是任务分配和执行的最小单位。如下:
TaskGroup#1:{
task#1: {source->transformation#1->transformation#2->queue1},
task#2: {queue1->sink}
}

Apache SeaTunnel(Incubating) 是一个分布式、高性能、易扩展、用于海量数据(离线&实时)同步和转化的数据集成平台https://github.com/apache/incubator-seatunnelhttps://seatunnel.apache.org/https://cwiki.apache.org/confluence/display/INCUBATOR/SeaTunnelProApache SeaTunnel(Incubating) 下载地址:https://seatunnel.apache.org/download我们相信,在「Community Over Code」(社区大于代码)、「Open and Cooperation」(开放协作)、「Meritocracy」(精英管理)、以及「多样性与共识决策」等 The Apache Way 的指引下,我们将迎来更加多元化和包容的社区生态,共建开源精神带来的技术进步!我们诚邀各位有志于让本土开源立足全球的伙伴加入 SeaTunnel 贡献者大家庭,一起共建开源!https://github.com/apache/incubator-seatunnel/issueshttps://github.com/apache/incubator-seatunnel/pullsdev-subscribe@seatunnel.apache.orghttps://join.slack.com/t/apacheseatunnel/shared_invite/zt-1cmonqu2q-ljomD6bY1PQ~oOzfbxxXWQhttps://twitter.com/ASFSeaTunnel