DolphinScheduler 深入
概述
Apache DolphinScheduler 是国产开源的工作流调度平台:可视化 DAG 编排、多租户隔离、完善的任务类型与告警。广泛用于国内大数据平台的离线任务调度。本文讲透 DAG 编排、工作流定义、租户/告警/环境管理与多租户架构。
一、DolphinScheduler 定位
| 特性 | 说明 |
|---|---|
| 类型 | 可视化工作流调度 |
| 特点 | 可视化、易用 |
| 任务 | 多类型 |
| 租户 | 多租户隔离 |
| 部署 | 前后端分离 |
与 Airflow 对比:
DolphinScheduler 可视化 + 中文生态
Airflow 代码化 + Python 生态二、核心组件
MasterServer(调度/分片)
WorkerServer(任务执行)
ApiServer(API/前端)
ZooKeeper(协调)
数据库(元数据)| 组件 | 职责 |
|---|---|
| Master | 任务分发、容错 |
| Worker | 执行任务 |
| Api | 管理接口 |
| ZK | 注册/选举 |
| DB | 元数据 |
HA:
Master/Worker 多节点
ZK 协调三、DAG 任务编排
3.1 概念
工作流(Process)= DAG
任务节点 + 依赖边| 概念 | 说明 |
|---|---|
| 工作流定义 | DAG 模板 |
| 任务节点 | 执行单元 |
| 依赖 | 上下游 |
| 工作流实例 | 一次运行 |
| 任务实例 | 任务一次运行 |
3.2 任务类型
| 类型 | 说明 |
|---|---|
| SHELL | Shell 脚本 |
| SQL | 数据库任务 |
| Spark | Spark 任务 |
| Flink | Flink 任务 |
| Python | Python |
| HTTP | 接口 |
| 子流程 | 嵌套 DAG |
| 依赖任务 | 等待外部 |
编排方式:
前端拖拽连线
或 YAML/代码导入四、工作流定义
4.1 定义要素
| 要素 | 说明 |
|---|---|
| 名称/分组 | 标识 |
| 调度 | 周期(Cron) |
| 参数 | 全局/局部 |
| 优先级 | 任务级别 |
| 失败策略 | 继续/结束 |
| 通知 | 告警 |
4.2 调度与运行
| 方式 | 说明 |
|---|---|
| Cron 调度 | 定时 |
| 手动触发 | 立即 |
| 补数 | 指定日期范围 |
| 定时+手动 | 组合 |
运行模式:
串行/并行
失败重试
超时4.3 参数传递
参数:
全局参数(工作流级)
局部参数(任务级)
上游输出 → 下游
时间参数(${system.biz.date})五、租户管理
5.1 概念
租户 = 资源隔离单元:
对应 Linux 用户/组
任务以租户身份执行| 元素 | 说明 |
|---|---|
| 租户 | 用户映射 |
| 用户 | 平台用户 |
| 项目 | 工作流分组 |
| 队列 | 资源队列 |
5.2 多租户隔离
| 隔离维度 | 说明 |
|---|---|
| 项目隔离 | 项目独立工作流 |
| 权限 | 项目/工作流权限 |
| 执行身份 | Linux 用户 |
| 资源 | 文件资源隔离 |
权限模型:
管理员 → 用户 → 项目 → 工作流
RBAC 控制六、告警管理
6.1 告警类型
| 告警 | 说明 |
|---|---|
| 任务失败 | 执行失败 |
| 工作流失败 | 整体失败 |
| 超时 | 执行超时 |
| 成功通知 | 可选 |
6.2 告警渠道
| 渠道 | 说明 |
|---|---|
| 邮件 | 内置 |
| 钉钉 | 机器人 |
| 企微 | 机器人 |
| 飞书 | 机器人 |
| Webhook | 通用 |
配置:
告警组(接收人)
工作流绑定告警组
触发条件6.3 告警设计
| 设计 | 说明 |
|---|---|
| 失败必告警 | 关键任务 |
| 分级 | 失败/延迟 |
| 去重 | 避免轰炸 |
| 关联日志 | 快速定位 |
七、环境管理
7.1 作用
任务执行环境:
定义 Worker 分组
环境变量/路径
资源管理| 环境 | 说明 |
|---|---|
| Worker 分组 | 指定执行节点 |
| 环境变量 | 通用配置 |
| 资源文件 | 上传/引用 |
7.2 资源管理
文件资源:
Shell 脚本、JAR、配置文件
项目级共享资源目录:
/dolphinscheduler/resources
按项目隔离八、多租户架构设计
8.1 架构
平台层:用户/权限/项目
调度层:Master(HA)
执行层:Worker 分组(多集群)
资源层:租户隔离 + 队列| 层 | 设计 |
|---|---|
| 租户 | Linux 用户隔离 |
| 项目 | 业务分组 |
| Worker | 分组/标签 |
| 队列 | 资源限制 |
8.2 隔离策略
| 策略 | 说明 |
|---|---|
| 项目级 | 业务隔离 |
| 用户级 | 权限隔离 |
| 执行级 | 用户身份 |
| 资源级 | 队列/配额 |
多团队场景:
各团队独立项目
共享调度集群
资源按队列限制九、运维要点
| 要点 | 说明 |
|---|---|
| 高可用 | Master/Worker 多节点 |
| 监控 | 任务状态/延迟 |
| 日志 | 集中收集 |
| 容错 | 任务重试/恢复 |
| 升级 | 兼容性 |
常见问题:
任务挂死 → 超时
资源不足 → 队列
权限问题 → 租户常见问题速查
| 问题 | 要点 |
|---|---|
| 核心组件 | Master/Worker/Api |
| DAG 怎么编 | 可视化拖拽 |
| 租户作用 | 资源隔离 |
| 告警渠道 | 钉钉/企微/邮件 |
| 多租户 | 项目+用户+队列 |
| 与 Airflow 区别 | 可视化 vs 代码 |