从 1.3 到 3.x:表名重构、任务翻倍,Apache DolphinScheduler 核心架构演进深度剖析

从 1.3 版本到 3.X 版本,Apache DolphinScheduler 已经经历了数次迭代,有了不少变化,相信大家都注意到了。
1785763331667c7f6f45544e1f154


点亮⭐️

https://github.com/apache/DolphinScheduler


从 1.3 版本到 3.X 版本,Apache DolphinScheduler 已经经历了数次迭代,有了不少变化,相信大家都注意到了。

本文将从表结构演进、任务类型扩展、注册中心多样化、架构设计优化和功能增强五个维度,系统对比 Apache DolphinScheduler 1.3 系列与 3.x 版本的核心差异,深入解析从 t_ds_process_definition t_ds_workflow_definition 表名重构从 12 种任务类型到 30+ 种的能力扩展、从单一 ZooKeeper 到多注册中心支持的架构演进,以及微内核插件架构、去中心化设计、容错机制和日志访问等关键技术升级,帮助读者全面理解 Apache DolphinScheduler 的架构演进路径和升级要点,有升级需要的用户尤其不要错过!

1. 系统架构概述


1.1 核心架构设计

DolphinScheduler 3.x 采用微内核 + 插件架构设计,所有核心能力(如任务、资源存储、注册中心等)都设计为扩展点,使用 SPI 提高系统的灵活性和可扩展性。

17857633321868d86d15e79a5b386

1.2 去中心化架构设计

DolphinScheduler 采用去中心化设计,Master 和 Worker 集群通过注册中心(ZooKeeper、JDBC 或 Etcd)实现无中心化特性。

  • MasterServer:主要负责 DAG 任务切分、任务提交监控,同时监控其他 MasterServer 和 WorkerServer 的健康状态

  • WorkerServer:主要负责任务执行和提供日志服务

  • 注册中心:支持 ZooKeeper、JDBC 和 Etcd 三种实现,用于集群管理和故障容错

2. 工作流总体存储结构(3.x)


2.1 表结构演进

从 1.3 系列到 3.x 版本,DolphinScheduler 对核心表名进行了统一重命名,将 "process" 相关表名改为 "workflow" 相关表名,以更准确地反映工作流的概念。

1.3 版本表名
3.x 版本表名
说明
t_ds_process_definitiont_ds_workflow_definition
工作流定义表
t_ds_process_definition_logt_ds_workflow_definition_log
工作流定义版本日志表
t_ds_process_instancet_ds_workflow_instance
工作流实例表
t_ds_process_task_relationt_ds_workflow_task_relation
工作流任务关系表
t_ds_process_task_relation_logt_ds_workflow_task_relation_log
工作流任务关系日志表

2.2 核心表结构详解

2.2.1 工作流定义表(t_ds_workflow_definition)

1

与 1.3 版本相比,3.x 版本的主要变化:

  • 使用 code 作为业务唯一标识,替代原来的 id
  • 新增 execution_type 字段,支持串行执行策略
  • 新增 warning_group_id 字段,关联告警组
  • 移除了 process_definition_json 字段,任务信息现在通过关联表存储

2.2.2 工作流数据模型关系

2

2.3 服务层核心接口

ProcessService 接口提供了工作流定义管理的核心方法:

方法
功能
saveWorkflowDefine()
保存工作流定义,支持版本控制
saveTaskDefine()
保存任务定义,支持版本控制
saveTaskRelation()
保存任务关系,构建 DAG 结构
genDagGraph()
从工作流定义生成 DAG 图
switchVersion()
切换工作流版本
findWorkflowDefinition()
查询工作流定义


3. 任务类型分类体系


3.1 任务类型架构

DolphinScheduler 3.x 将任务类型扩展到 30+ 种,并按照功能特性分为 5 大类:

3

3.2 任务类型对比(1.3 vs 3.x)

类别
1.3 版本
3.x 版本
新增类型
通用任务
SHELL, SQL, PYTHON, SPARK, FLINK, MR, HTTP
+ JAVA, GRPC, DINKY, FLINK_STREAM, HIVECLI, REMOTESHELL
6 种
云原生任务
-
EMR, K8S, DMS, DATA_FACTORY, ALIYUN_SERVERLESS_SPARK
5 种
逻辑任务
CONDITIONS, SUB_PROCESS, DEPENDENT
+ SWITCH
1 种
数据集成
DATAX, SQOOP
+ SeaTunnel
1 种
机器学习
-
JUPYTER, MLFLOW, OPENMLDB, DVC, SAGEMAKER, PYTORCH, KUBEFLOW
7 种
其他任务
-
ZEPPELIN, CHUNJUN, DATASYNC, LINKIS
4 种

3.3 典型任务参数结构

3.3.1 通用任务参数结构

所有任务类型都支持以下通用参数:

4

3.3.2 Shell 任务参数示例
















{  "localParams": [],  "resourceList": [    {      "id": 3,      "name": "run.sh",      "res": "run.sh"    }  ],  "rawScript": "echo 'Hello from DolphinScheduler 3.x'",  "conditionResult": {    "successNode": [""],    "failedNode": [""]  }}

3.3.3 SQL 任务参数示例












{  "type": "MYSQL",  "datasource": 1,  "sql": "SELECT * FROM users WHERE id = ${id}",  "udfs": "",  "sqlType": "0",  "sendEmail": false,  "displayRows": 10,  "preStatements": [],  "postStatements": []}

4. 核心架构流程


4.1 工作流执行流程

5

4.2 注册中心架构

DolphinScheduler 3.x 支持多种注册中心实现,包括 ZooKeeper、JDBC 和 Etcd,实现了真正的去中心化架构。

6

4.2.1 JDBC 注册中心

JDBC 注册中心使用关系数据库实现事件监听和分布式锁,适合已有数据库基础设施的环境。

核心特性:

  • 事件监听:

    通过 JdbcRegistryDataChangeListenerAdapter 监听数据库数据变化
  • 分布式锁:支持阻塞和超时两种锁获取方式

  • 心跳机制:通过心跳检测客户端存活状态,自动清理失效锁

配置示例:










registry:  type: jdbc  heartbeat-refresh-interval: 3s  session-timeout: 60s  hikari-config:    jdbc-url: jdbc:mysql://127.0.0.1:3306/dolphinscheduler    username: root    password: root    maximum-pool-size: 5

4.2.2 Etcd 注册中心

Etcd 注册中心基于 Jetcd 客户端库实现,适合云原生环境。
核心特性:

  • Watch API:监听指定键或键前缀的变化

  • Lease 锁:基于 TTL 的租约机制,客户端断开时自动释放锁

  • 连接健康监控:

    通过 EtcdConnectionStateListener 跟踪连接状态

5. 容错设计


5.1 宕机容错机制

DolphinScheduler 的容错设计依赖于注册中心的 Watcher 机制,分为 Master 容错和 Worker 容错两种情况。

7

5.2 任务失败重试

任务失败重试、流程失败恢复和流程失败重跑是三个不同的概念:

类型
级别
触发方式
执行范围
任务失败重试
任务级别
系统自动
自动重试直到成功或超过重试次数
流程失败恢复
流程级别
手动触发
从失败节点或当前节点开始执行
流程失败重跑
流程级别
手动触发
从开始节点重新执行

任务节点分类:

  • 业务节点:Shell、SQL、Spark、Flink 等,支持失败重试

  • 逻辑节点:DEPENDENT、SUB_WORKFLOW、CONDITIONS 等,不支持失败重试

    6. 任务优先级设计


DolphinScheduler 采用多级优先级设计,确保重要任务优先执行。

8

实现机制:

  • 流程实例优先级_流程实例id_任务优先级_任务id 信息保存到注册中心任务队列
  • 通过字符串比较获取最高优先级任务
  • 流程优先级和任务优先级各分为 5 级: HIGHEST、HIGH、MEDIUM、LOW、LOWEST

    7. 日志访问机制


DolphinScheduler 3.x 使用 gRPC 实现远程日志访问,替代了早期的 Netty 实现。

9

Logback 配置关键点:

  • 使用 SiftingAppender 按任务 ID 分离日志文件
  • TaskLogFilter

    过滤任务相关日志
  • TaskLogDiscriminator

    根据 taskAppId 区分不同任务
  • SensitiveDataConverter

    脱敏敏感数据

8. 系统模块架构



DolphinScheduler 由多个核心模块组成,各模块职责清晰:

10

9. MasterServer内部核心组件


MasterServer 采用分布式无中心设计,内部包含多个核心线程和组件,协同完成工作流调度。

11
  • 组件详细说明
组件
职责
关键操作
DistributedQuartz
分布式调度组件
负责定时任务的启停操作,调起任务后由线程池处理后续操作
MasterSchedulerService
命令扫描线程
定时扫描 t_ds_command表,根据不同命令类型执行业务操作
WorkflowExecuteRunnable
工作流执行线程
负责 DAG 任务切分、任务提交监控、各种事件类型的逻辑处理
TaskExecuteRunnable
任务执行线程
负责任务的处理和持久化,生成任务事件并提交到事件队列
EventExecuteService
事件执行服务
负责工作流实例事件队列的轮询
StateWheelExecuteThread
状态轮询线程
负责工作流和任务超时、任务重试、任务依赖的轮询
FailoverExecuteThread
容错执行线程
负责 Master 容错和 Worker 容错的相关逻辑


10. WorkerServer内部核心组件


WorkerServer 同样采用分布式无中心设计,主要负责任务执行和日志服务。

12
  • 组件详细说明
组件
职责
关键操作
WorkerManagerThread
任务管理线程
不断从任务队列中领取任务,提交到线程池处理
TaskExecuteThread
任务执行线程
根据不同的任务类型进行任务的实际处理
RetryReportTaskStatusThread
重试报告线程
定时轮询向 Master 汇报任务状态,直到 Master 回复状态 ack


11. 启动流程活动图



DolphinScheduler 的工作流启动流程涉及多个组件的协同工作。

13

12. 去中心化 vs 中心化架构对比


DolphinScheduler 采用动态中心化的去中心化架构,与传统的中心化架构有显著区别。

14

13. 核心术语说明


理解 DolphinScheduler 需要掌握以下核心术语:

术语
说明
DAG
有向无环图,工作流中的任务以 DAG 形式组装
工作流定义
通过拖拽任务节点并建立关联形成的可视化 DAG
工作流实例
工作流定义的实例化,每次运行产生一个实例
任务实例
任务节点的实例化,标识某个具体任务的执行
调度方式
支持基于 cron 表达式的定时调度和手动调度
依赖
支持 DAG 简单依赖和任务依赖节点
补数
历史数据回填,支持区间并行和串行两种模式


14. 总结


DolphinScheduler 3.x 相比 1.3 系列版本,在架构和功能上都有显著提升:

架构演进:

  • 从单一 ZooKeeper 注册中心扩展到支持 ZooKeeper、JDBC、Etcd 多种实现
  • 从中心化架构演进到真正的去中心化架构
  • 采用微内核 + 插件架构,提高系统可扩展性

表结构优化:

  • 统一表名命名规范,从 process 改为 workflow
  • 引入 code 作为业务唯一标识
  • 新增 execution_type 支持多种执行策略
  • 任务信息从 JSON 字段迁移到关联表存储

功能增强:

  • 任务类型从 12 种扩展到 30+ 种
  • 新增云原生任务和机器学习任务支持
  • 增强容错机制和优先级设计
  • 日志访问从 Netty 升级到 gRPC

这些改进使 DolphinScheduler 成为一个更加现代化、可扩展、易维护的数据编排平台。

Notes

  • 补充内容基于 docs/docs/en/architecture/design.md docs/docs/zh/architecture/design.md 文档
  • MasterServer 和 WorkerServer 的内部组件设计体现了系统的模块化和职责分离
  • 去中心化架构通过注册中心实现动态选举,避免了单点故障问题
  • 建议参考架构设计文档了解更多实现细节




END




17857633405080af496dea826c2f1



用户案例


DolphinScheduler Agent开源上线Cisco Webex天翼云Zoom网易邮箱 每日互动 惠生工程作业帮 博世智驾蔚来汽车 长城汽车集度长安汽车思科网讯食行生鲜联通医疗联想新网银行兴业证券唯品富邦消费金融 自如有赞伊利当贝大数据珍岛集团传智教育BigoYY直播 拈花云科太美医疗深圳某智能制造企业
17857633405080af496dea826c2f1



迁移实战


Azkaban Ooize(当贝迁移案例)airflow (有赞迁移案例)Air2phin(迁移工具)Airflow
17857633405080af496dea826c2f1



最新发版消息



Apache DolphinScheduler 3.4.2 正式发布!新增 Amazon EMR Serverless 插件,增强监控与补数据能力
17857633405080af496dea826c2f1



加入社区


关注社区的方式有很多:

  • GitHub: https://github.com/apache/dolphinscheduler
  • 官网:https://dolphinscheduler.apache.org/en-us
  • 订阅开发者邮件:dev@dolphinscheduler@apache.org(向邮箱发送任意内容,收到邮件后回复同意订阅即可)
  • X.com:@DolphinSchedule
  • YouTube:https://www.youtube.com/@apachedolphinscheduler
  • Slack:https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-1cmrxsio1-nJHxRJa44jfkrNL_Nsy9Qg

同样地,参与Apache DolphinScheduler 有非常多的参与贡献的方式,主要分为代码方式和非代码方式两种。

非代码方式包括:

完善文档、翻译文档;翻译技术性、实践性文章;投稿实践性、原理性文章;成为布道师;社区管理、答疑;会议分享;测试反馈;用户反馈等。

‍代码方式包括:

查找Bug;编写修复代码;开发新功能;提交代码贡献;参与代码审查等。

贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。

社区汇总了以下适合新手的问题列表https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3A%22first+time+contributor%22

优先级问题列表https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3Apriority%3Ahigh

如何参与贡献链接https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2/%E8%B4%A1%E7%8C%AE%E6%8C%87%E5%8D%97_menu/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E_menu

如果你❤️小海豚,就来为我点亮Star吧!

https://github.com/apache/dolphinscheduler


1785763342191e91bb9eaa4af7900


1785763342644f47b6464bafe7d1d

你的好友小海豚拍了拍你

并请你帮她点一下“分享”