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

【Seatunnel-2.3.10】源码解析:Zeta引擎-分布式集群

SeaTunnel 2025-12-31
207
作者介绍
大家好,我在互联网中厂工作,负责搜索系统工程方向,擅长分布式架构、搜索引擎、搜索相关性优化等,近期在推进SeaTunnel在公司内部的落地,需要跟同事、老板介绍SeaTunnel的技术架构,也需要详细的运行流程,帮助同时更好的上手开发、维护。
在使用过程中,对Seatunnel运行机制、实现原理比较感兴趣,因此花了一部分时间,整理了SeaTunnel源码分析系列,希望对大家有帮助;
一、分布式架构演进
1. 架构演进路径
  • 阶段1:基于Spark/Flink的引擎依赖(V1.x),初始架构强耦合Spark/Flink引擎,连接器需为不同的引擎重复开发,维护成本高;
  • 阶段2:连接器与引擎解耦(V2.x),重构连接器API,实现批流一体:同一数据源仅需一套代码,支持 Spark/Flink 双引擎。采用 Java SPI 实现插件动态注册;
  • 阶段3:自研Zeta引擎(V2.3+),专为数据集成场景设计,解决 Spark/Flink 在 CDC 同步、资源占用高等问题。核心特性:
    • 引擎内置Hazelcast(替代 ZooKeeper),状态存储自管理;
    • 支持单节点低资源运行(1 核 CPU 处理多表实时同步)
2. 集群角色升级
架构类型
节点角色
解决痛点
使用场景
混合架构(旧)
节点同时担任Master/Worker
Active Master宕机引发全集群重新调度
中小规模集群
Master/Worker分离(V2.3.6+)
Master(调度)、Worker(执行)、
Master_and_worker(混合)
资源隔离,节点职责隔离
大规模生产环境

二、分布式集群
2.1 概览
首先,Seatunnel是基于Hazelcast实现的分布式集群通信(这里不做Hazelcast详细介绍);
在2.3.6版本之后,集群的节点可以被分配为Master或Worker节点,从而将调度和执行分开,避免Master节点负载过高从而出现问题;
而且2.3.6版本还添加了一个功能,可以对每个节点添加tag属性,当提交任务是可以通过tag来选择任务将要运行的节点, 从而达到资源隔离的目的。
集群的服务端分为Master、Worker节点,
Master节点负责生成任务执行计划,并进行作业调度执行和状态监控;
Worker节点提供了任务执行环境,执行具体的任务;
2.2 集群管理服务

ClusterServiceImpl,负责集成Hazelcast实现分布式集群管理,例如:节点变更、Master选举、心跳等;

  • membershipManager,负责管理集群成员;
  • clusterStateManager,负责存储节点状态,管理集群状态事务,当一个节点接入集群时,他的初始状态被重置;
  • clusterJoinManager,负责管理节点加入线程,如果不是主节点,将主节点发送给该请求;如果是主节点,处理请求,并通知其他成员新加入的节点;
  • clusterHeartbeatManager,负责管理节点的心跳和发送线程,该类周期性的发送心跳,如果检测到某个成员不在活动范围,则将该成员踢出集群;
源码分析:
ClusterServiceImpl该类实现了Hazelcast相关接口,以此实现分布式集群管理,主要包含以下主要模块:
1)实例化阶段,首先,初始化集群各个组件,包括:节点管理、集群状态、加入集群管理、集群心跳管理;其次,通过Hazelcast接口注册集群相关事件执行器;
该类的实例化入口是在Hazelcast内部实现的,通过覆盖类路径的方式,实现了逻辑的复写。
2)集群加入阶段:
3)成员更新
4)心跳管理
5)集群状态变更
6)集群关闭
7)主节点选举
2.3 Master服务

CoordinatorService是集群的Master服务,提供了每个作业从LogicalDag到ExecutionDag,再到PhysicalDag的生成流程,并最终创建作业的JobMaster进行作业的调度执行和状态监控;

  • JobMaster,负责生成真正的执行流程,获取可用资源在Worker节点上执行;
  • CheckpointService,负责作业的Checkpoint流程控制;
  • ResourceManager, 负责作业资源的申请和管理;
  • Metric Service,负责作业监控信息的统计和汇总;
源码分析:
CoordinatorService类是SeaTunnel引擎的核心组件,负责整个集群的协调和管理工作,通过定期检查和状态管理来确保作业的可靠执行。
1)初始化阶段,该类通过SeaTunnelServer.startMaster()方法中实例化,初始化时,启动常驻线程来处理调度任务;
2)任务提交,submitJob()这个方法实现了作业提交的完整流程,包括状态管理、异常处理、资源分配等,是 SeaTunnel 作业调度的入口点。
首先,通过检查后,会初始化JobMaster实例,并将该任务的状态信息记录到IMap中,JobMaster初始化完成后,则完成任务提交,最后验证任务正常提交后,修改任务为PENDING状态,任务生命周期包含以下状态:SUBMIT -> PENDING -> RUNNING -> FINISHED/FAILED
3)任务执行,pendingJobSchedule 是 SeaTunnel 的任务调度核心方法,负责从待处理队列中获取任务并进行调度执行。
首先,从待处理队列中获取任务,如果队列空则阻塞等待;其次,进行资源预检查,当资源不足时,默认等待3秒后重试;最后,更新任务状态并执行任务;

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

评论