
点亮⭐️
https://github.com/apache/
从 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. 系统架构概述
DolphinScheduler 3.x 采用微内核 + 插件架构设计,所有核心能力(如任务、资源存储、注册中心等)都设计为扩展点,使用 SPI 提高系统的灵活性和可扩展性。

DolphinScheduler 采用去中心化设计,Master 和 Worker 集群通过注册中心(ZooKeeper、JDBC 或 Etcd)实现无中心化特性。
MasterServer:主要负责 DAG 任务切分、任务提交监控,同时监控其他 MasterServer 和 WorkerServer 的健康状态
WorkerServer:主要负责任务执行和提供日志服务
注册中心:支持 ZooKeeper、JDBC 和 Etcd 三种实现,用于集群管理和故障容错
2. 工作流总体存储结构(3.x)
从 1.3 系列到 3.x 版本,DolphinScheduler 对核心表名进行了统一重命名,将 "process" 相关表名改为 "workflow" 相关表名,以更准确地反映工作流的概念。
t_ds_process_definition | t_ds_workflow_definition | |
t_ds_process_definition_log | t_ds_workflow_definition_log | |
t_ds_process_instance | t_ds_workflow_instance | |
t_ds_process_task_relation | t_ds_workflow_task_relation | |
t_ds_process_task_relation_log | t_ds_workflow_task_relation_log |

与 1.3 版本相比,3.x 版本的主要变化:
code 作为业务唯一标识,替代原来的 idexecution_type 字段,支持串行执行策略warning_group_id 字段,关联告警组process_definition_json 字段,任务信息现在通过关联表存储
ProcessService 接口提供了工作流定义管理的核心方法:
saveWorkflowDefine() | |
saveTaskDefine() | |
saveTaskRelation() | |
genDagGraph() | |
switchVersion() | |
findWorkflowDefinition() |
3. 任务类型分类体系
DolphinScheduler 3.x 将任务类型扩展到 30+ 种,并按照功能特性分为 5 大类:

| 通用任务 | |||
| 云原生任务 | |||
| 逻辑任务 | |||
| 数据集成 | |||
| 机器学习 | |||
| 其他任务 |
所有任务类型都支持以下通用参数:

{ "localParams": [], "resourceList": [ { "id": 3, "name": "run.sh", "res": "run.sh" } ], "rawScript": "echo 'Hello from DolphinScheduler 3.x'", "conditionResult": { "successNode": [""], "failedNode": [""] }}{ "type": "MYSQL", "datasource": 1, "sql": "SELECT * FROM users WHERE id = ${id}", "udfs": "", "sqlType": "0", "sendEmail": false, "displayRows": 10, "preStatements": [], "postStatements": []}4. 核心架构流程

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

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
Etcd 注册中心基于 Jetcd 客户端库实现,适合云原生环境。
核心特性:
Watch API:监听指定键或键前缀的变化
Lease 锁:基于 TTL 的租约机制,客户端断开时自动释放锁
连接健康监控:
EtcdConnectionStateListener 跟踪连接状态5. 容错设计
DolphinScheduler 的容错设计依赖于注册中心的 Watcher 机制,分为 Master 容错和 Worker 容错两种情况。

任务失败重试、流程失败恢复和流程失败重跑是三个不同的概念:
| 任务失败重试 | |||
| 流程失败恢复 | |||
| 流程失败重跑 |
任务节点分类:
业务节点:Shell、SQL、Spark、Flink 等,支持失败重试
逻辑节点:DEPENDENT、SUB_WORKFLOW、CONDITIONS 等,不支持失败重试
6. 任务优先级设计
DolphinScheduler 采用多级优先级设计,确保重要任务优先执行。

实现机制:
流程实例优先级_流程实例id_任务优先级_任务id 信息保存到注册中心任务队列7. 日志访问机制
DolphinScheduler 3.x 使用 gRPC 实现远程日志访问,替代了早期的 Netty 实现。

Logback 配置关键点:
SiftingAppender 按任务 ID 分离日志文件TaskLogFilter
TaskLogDiscriminator
taskAppId 区分不同任务SensitiveDataConverter
8. 系统模块架构
DolphinScheduler 由多个核心模块组成,各模块职责清晰:

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

| DistributedQuartz | ||
| MasterSchedulerService | t_ds_command表,根据不同命令类型执行业务操作 | |
| WorkflowExecuteRunnable | ||
| TaskExecuteRunnable | ||
| EventExecuteService | ||
| StateWheelExecuteThread | ||
| FailoverExecuteThread |
10. WorkerServer内部核心组件
WorkerServer 同样采用分布式无中心设计,主要负责任务执行和日志服务。

| WorkerManagerThread | ||
| TaskExecuteThread | ||
| RetryReportTaskStatusThread |
11. 启动流程活动图
DolphinScheduler 的工作流启动流程涉及多个组件的协同工作。

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

13. 核心术语说明
理解 DolphinScheduler 需要掌握以下核心术语:
| DAG | |
| 工作流定义 | |
| 工作流实例 | |
| 任务实例 | |
| 调度方式 | |
| 依赖 | |
| 补数 |
14. 总结
DolphinScheduler 3.x 相比 1.3 系列版本,在架构和功能上都有显著提升:
架构演进:
表结构优化:
process 改为 workflowcode 作为业务唯一标识execution_type 支持多种执行策略功能增强:
这些改进使 DolphinScheduler 成为一个更加现代化、可扩展、易维护的数据编排平台。
docs/docs/en/architecture/design.md 和 docs/docs/zh/architecture/design.md 文档END

用户案例

迁移实战

最新发版消息

加入社区
关注社区的方式有很多:
同样地,参与Apache DolphinScheduler 有非常多的参与贡献的方式,主要分为代码方式和非代码方式两种。
非代码方式包括:
完善文档、翻译文档;翻译技术性、实践性文章;投稿实践性、原理性文章;成为布道师;社区管理、答疑;会议分享;测试反馈;用户反馈等。
代码方式包括:
查找Bug;编写修复代码;开发新功能;提交代码贡献;参与代码审查等。


你的好友小海豚拍了拍你
并请你帮她点一下“分享”
