从 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 的架构演进路径和升级要点,有升级需要的用户尤其不要错过!
DolphinScheduler 3.x 采用微内核 + 插件架构设计,所有核心能力(如任务、资源存储、注册中心等)都设计为扩展点,使用 SPI 提高系统的灵活性和可扩展性。

DolphinScheduler 采用去中心化设计,Master 和 Worker 集群通过注册中心(ZooKeeper、JDBC 或 Etcd)实现无中心化特性。
从 1.3 系列到 3.x 版本,DolphinScheduler 对核心表名进行了统一重命名,将 "process" 相关表名改为 "workflow" 相关表名,以更准确地反映工作流的概念。
| 1.3 版本表名 | 3.x 版本表名 | 说明 |
|---|---|---|
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() |
保存任务关系,构建 DAG 结构 |
genDagGraph() |
从工作流定义生成 DAG 图 |
switchVersion() |
切换工作流版本 |
findWorkflowDefinition() |
查询工作流定义 |
DolphinScheduler 3.x 将任务类型扩展到 30+ 种,并按照功能特性分为 5 大类:

| 类别 | 1.3 版本 | 3.x 版本 | 新增类型 |
|---|---|---|---|
| 通用任务 | SHELL, SQL, PYTHON, SPARK, FLINK, MR, HTTP | + JAVA, GRPC, DINKY, FLINK_STREAM, HIVECLI, REMOTESHELL | 6 种 |
| 云原生任务 | - | EMR, K8S, DMS, DATA FACTORY, ALIYUNSERVERLESS_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 种 |
所有任务类型都支持以下通用参数:

{
"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": []
}

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 客户端库实现,适合云原生环境。 核心特性:
EtcdConnectionStateListener 跟踪连接状态DolphinScheduler 的容错设计依赖于注册中心的 Watcher 机制,分为 Master 容错和 Worker 容错两种情况。

任务失败重试、流程失败恢复和流程失败重跑是三个不同的概念:
| 类型 | 级别 | 触发方式 | 执行范围 |
|---|---|---|---|
| 任务失败重试 | 任务级别 | 系统自动 | 自动重试直到成功或超过重试次数 |
| 流程失败恢复 | 流程级别 | 手动触发 | 从失败节点或当前节点开始执行 |
| 流程失败重跑 | 流程级别 | 手动触发 | 从开始节点重新执行 |
任务节点分类:
DolphinScheduler 采用多级优先级设计,确保重要任务优先执行。

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

Logback 配置关键点:
SiftingAppender 按任务 ID 分离日志文件TaskLogFilter 过滤任务相关日志TaskLogDiscriminator 根据
taskAppId 区分不同任务SensitiveDataConverter 脱敏敏感数据DolphinScheduler 由多个核心模块组成,各模块职责清晰:

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

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

| 组件 | 职责 | 关键操作 |
|---|---|---|
| WorkerManagerThread | 任务管理线程 | 不断从任务队列中领取任务,提交到线程池处理 |
| TaskExecuteThread | 任务执行线程 | 根据不同的任务类型进行任务的实际处理 |
| RetryReportTaskStatusThread | 重试报告线程 | 定时轮询向 Master 汇报任务状态,直到 Master 回复状态 ack |
DolphinScheduler 的工作流启动流程涉及多个组件的协同工作。

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

理解 DolphinScheduler 需要掌握以下核心术语:
| 术语 | 说明 |
|---|---|
| DAG | 有向无环图,工作流中的任务以 DAG 形式组装 |
| 工作流定义 | 通过拖拽任务节点并建立关联形成的可视化 DAG |
| 工作流实例 | 工作流定义的实例化,每次运行产生一个实例 |
| 任务实例 | 任务节点的实例化,标识某个具体任务的执行 |
| 调度方式 | 支持基于 cron 表达式的定时调度和手动调度 |
| 依赖 | 支持 DAG 简单依赖和任务依赖节点 |
| 补数 | 历史数据回填,支持区间并行和串行两种模式 |
DolphinScheduler 3.x 相比 1.3 系列版本,在架构和功能上都有显著提升:
架构演进:
表结构优化:
process 改为
workflowcode 作为业务唯一标识execution_type 支持多种执行策略功能增强:
这些改进使 DolphinScheduler 成为一个更加现代化、可扩展、易维护的数据编排平台。
docs/docs/en/architecture/design.md 和
docs/docs/zh/architecture/design.md 文档来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70014275/viewspace-3177154/ ,如需转载,请注明出处,否则将追究法律责任。