​全面解析 Apache DolphinScheduler 数据库模式:从表结构到调度逻辑

本文档对 Apache DolphinScheduler 的数据库模式进行了系统介绍,涵盖存储工作流定义、任务配置、调度信息、用户数据及其他核心系统组件的各类表的结构、相互关系和功能,帮助用户深入理解 DolphinScheduler 的运行机制。

本文档对 Apache DolphinScheduler 的数据库模式进行了系统介绍,涵盖存储工作流定义、任务配置、调度信息、用户数据及其他核心系统组件的各类表的结构、相互关系和功能,帮助用户深入理解 DolphinScheduler 的运行机制。

目的与范围

在 DolphinScheduler 中,数据库模式是整个工作流调度系统的持久化基础。它用于存储所有配置信息、执行记录、用户数据以及系统运行所需的元数据。系统官方支持 MySQL、PostgreSQL 和 H2 三种数据库,并为每种数据库提供了对应的 SQL 脚本。

支持的数据库系统

DolphinScheduler 提供了以下数据库的初始化脚本:

  • MySQL

  • PostgreSQL (

  • H2(主要用于测试)

脚本文件位置如下:

  • MySQL: dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_mysql.sql

  • PostgreSQL: dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_postgresql.sql

  • H2: dolphinscheduler-dao/src/main/resources/sql/dolphinscheduler_h2.sql

架构总览

数据库模式可按功能分为以下几组:

17641238430005

  1. 工作流(Workflow)相关表

  2. 任务(Task)相关表

  3. 项目(Project)与资源(Resource)相关表

  4. 用户管理表

  5. 调度(Scheduling)表

  6. 告警(Alerting)表

  7. 注册(Registry)表(3.3.0 版本新增)

模式结构详解

1. 工作流相关表

工作流相关表用于存储工作流定义、实例及其与任务的关系。在 3.3.0 版本中,所有“process”前缀的表均重命名为“workflow”

关键表:

表名描述
t_ds_workflow_definition存储工作流定义,包括代码、名称、描述及其他元数据。
t_ds_workflow_definition_log保存工作流定义变更历史。
t_ds_workflow_instance记录运行中及已完成的工作流实例。
t_ds_workflow_task_relation映射工作流内部任务之间的关系。
t_ds_workflow_task_relation_log保存任务关系变更历史。

工作流实例状态:

17641239613934

2. 任务相关表

任务相关表用于存储任务定义、执行实例及参数。

关键表:

表名描述
t_ds_task_definition存储任务定义,包括类型、参数及其他配置。
t_ds_task_definition_log保存任务定义变更历史。
t_ds_task_instance记录运行中及已完成的任务实例。
t_ds_task_group定义任务组,用于资源隔离和优先级管理。
t_ds_task_instance_context存储任务执行上下文数据。

17641241526855

3. 项目与资源表

用于管理项目及其相关资源(文件、UDF、自定义数据源等)。

关键表:

表名描述
t_ds_project存储项目定义,包括名称和描述。
t_ds_project_parameter存储项目级参数。
t_ds_project_preference存储项目偏好设置及配置。
t_ds_resources管理资源文件(已弃用)。
t_ds_udfs存储用户自定义函数(UDF)。
t_ds_datasource管理数据源连接信息。

4. 用户管理表

用于用户认证、授权、租户管理等功能。

关键表:

表名描述
t_ds_user存储用户信息,包括用户名、密码和邮箱。
t_ds_tenant管理租户信息。
t_ds_access_token存储 API 访问令牌。
t_ds_session管理用户会话。
t_ds_relation_project_user映射用户与项目的关系及权限级别。
t_ds_relation_datasource_user映射用户与数据源的关系及权限级别。

5. 调度表

管理调度命令、定时配置及任务调度记录。

关键表:

表名描述
t_ds_command存储用于执行工作流的命令。
t_ds_error_command存储执行失败的命令。
t_ds_schedules存储工作流的调度配置。
QRTZ_*Quartz 调度器表,用于作业调度。

指令类型:

类型值描述
0启动作业流
1从当前节点开始执行
2恢复容错工作流
3恢复已暂停的工作流
4从失败节点开始执行
5补数(Backfill)
6调度执行
7重跑(Rerun)
8暂停
9停止
10恢复等待线程

6. 告警表

管理告警配置及记录。

关键表:

表名描述
t_ds_alert存储告警消息。
t_ds_alertgroup管理告警分组及通知路由。
t_ds_alert_plugin_instance配置告警插件(如 Email、Slack 等)。

7. 注册表

从 3.3.0 版本起,增加了基于 JDBC 的注册实现,替代 ZooKeeper。

关键表:

表名描述
t_ds_jdbc_registry_data存储注册中心数据。
t_ds_jdbc_registry_lock管理分布式锁。
t_ds_jdbc_registry_client_heartbeat记录客户端心跳信息。
t_ds_jdbc_registry_data_change_event记录数据变更事件。

表关系示意图

下图展示了关键表之间的关系:

17641244836012

模式演化的重要变更

3.3.0 版本

  • 将“process”前缀表重命名为“workflow”:

    • t_ds_process_definitiont_ds_workflow_definition

    • t_ds_process_instancet_ds_workflow_instance

    • t_ds_process_task_relationt_ds_workflow_task_relation 及对应 log 表

  • 新增 JDBC 注册表:t_ds_jdbc_registry_datat_ds_jdbc_registry_lockt_ds_jdbc_registry_client_heartbeatt_ds_jdbc_registry_data_change_event

  • 新增任务血缘表:t_ds_workflow_task_lineage

  • 任务类型 SUB_PROCESS 改为 SUB_WORKFLOW

3.2.0 版本

  • 新增项目参数表和项目偏好设置表:t_ds_project_parametert_ds_project_preference

  • 流程定义表新增执行类型字段:execution_type

  • 任务表新增缓存能力字段:is_cachecache_key

  • 引入任务测试标记(task test flag)功能

功能分类的模式详情

工作流定义与执行

工作流定义表存储工作流的结构和配置,实例表跟踪执行情况。

存储在工作流定义表中的关键元数据:

  • 工作流代码(唯一标识)

  • 工作流名称和描述

  • 全局参数

  • 超时设置

  • 告警组设置

  • 执行类型(并行、串行等待、串行丢弃、串行优先)

17641247071172

任务定义与执行

任务定义表存储任务配置,实例表跟踪执行。

关键元数据包括:

  • 任务代码(唯一标识)

  • 任务名称和描述

  • 任务类型(SHELL、SQL、SPARK 等)

  • 任务参数(针对具体类型)

  • 资源需求(CPU、内存)

  • 超时设置

  • 重试配置

  • Worker 组分配

17641248657565

用户与安全管理

安全模型包括:

  • 用户密码认证

  • 会话管理

  • 基于访问令牌的 API 认证

  • 通过租户系统实现多租户

  • 资源级权限控制

17641249317465

总结

DolphinScheduler 的数据库模式覆盖了工作流调度的各个环节,包括定义、执行跟踪、资源管理和安全控制。
随着版本迭代,该模式不断演进,尤其是 3.3.0 版本,将许多“process”表改为“workflow”,更准确地反映其功能。

理解这一数据库模式有助于:

  • 为 DolphinScheduler 开发新功能

  • 通过数据库排查问题

  • 构建自定义报表或集成解决方案

  • 升级版本时理解数据模型