一、DolphinScheduler 收费吗?
答案是:核心开源版完全免费 🆓
DolphinScheduler 是 Apache 软件基金会 的顶级开源项目,采用 Apache 2.0 协议,这意味着:
| 你能做的事 | 说明 |
|---|---|
| ✅ 免费下载使用 | 从官网/GitHub直接下载,0元 |
| ✅ 免费商用 | 公司拿来调度日均千万级任务,不花一分钱 |
| ✅ 免费改源码 | 看源代码、改源代码,完全合法 |
| ✅ 免费二次开发 | 基于它开发自己的产品 |
那它靠什么赚钱?
核心团队成立了白鲸开源(WhaleOps)公司,提供商业版 WhaleScheduler:
开源版 DolphinScheduler(Apache 2.0)
↓ 免费,社区支持
┌────┴────┐
│ 基础功能 │ 满足90%企业需求
└─────────┘
商业版 WhaleScheduler
↓ 收费,企业级服务
┌────┴────────────────┐
│ 更强调度引擎 │
│ IDE编辑界面 │
│ 行业定制功能(金融等) │
│ 7×24技术支持 │
│ 安全加固 + SLA保障 │
└──────────────────────┘
打个比方:DolphinScheduler 就像免费的安卓系统,人人都能用;WhaleScheduler 就像某些厂商的定制版安卓,加了专属功能+售后保障。
二、依赖条件有哪些?
把 DolphinScheduler 跑起来,需要这些"地基":
硬性依赖(缺一不可)
| 依赖组件 | 最低版本 | 作用 | 一句话解释 |
|---|---|---|---|
| Java (JDK) | JDK 1.8+ | 运行环境 | DS 本身是 Java 写的,就像打游戏需要先装显卡驱动 |
| MySQL | 5.7+ | 数据存储 | 存放工作流配置、任务执行记录、用户信息 |
| ZooKeeper | 3.4.6+ | 注册中心 | "签到表"------记录哪些 Master 和 Worker 在线,谁挂了立刻知道 |
可选依赖(按需添加)
| 依赖组件 | 何时需要 | 作用 |
|---|---|---|
| HDFS / S3 | 任务需要共享脚本/文件时 | 资源中心,统一存放任务执行需要的脚本 |
| Hadoop / Spark | 任务是大数据计算任务时 | 实际跑数据的计算引擎 |
| Docker / K8s | 容器化部署时 | 一键启动,省去手动安装各种依赖 |
一图看懂依赖关系
你写的任务(Shell、Python、Spark、SQL...)
↑ 靠它调度执行
┌────────────────┐
│ DolphinScheduler│ ← Java 1.8+
└───┬────────┬───┘
│ │
┌────▼───┐ ┌─▼────────┐
│ MySQL │ │ZooKeeper │
│ 5.7+ │ │ 3.4.6+ │
│(存数据) │ │(管心跳) │
└────────┘ └──────────┘
│
┌────▼────┐ (可选)
│ HDFS │ 存放共享脚本和资源文件
└─────────┘
三、怎么使用它?
四种使用方式,从简单到高级
方式一:Web UI 拖拽(最简单,推荐入门)
打开浏览器,像画流程图一样拖拖拽拽就能创建工作流:
步骤:
1. 登录 Web 界面
2. 进入"项目管理" → 新建工作流
3. 从左侧拖拽任务节点到画布上
- 拖一个"Shell"节点 → 写一段 bash 脚本
- 拖一个"Python"节点 → 写一段 Python 代码
- 拖一个"SQL"节点 → 写一条查询语句
4. 用箭头连线,表示依赖关系
5. 设置定时触发(比如"每天凌晨2点")
6. 保存 → 上线 → 自动运行
方式二:Python SDK(程序员最爱)
python
# 用代码定义工作流(像写配置文件一样简单)
from pydolphinscheduler.core.process_definition import ProcessDefinition
from pydolphinscheduler.tasks import Shell
# 创建一个工作流
with ProcessDefinition(name="每日报表") as pd:
# 任务1:抽取数据
task_extract = Shell(name="抽取数据", command="python extract.py")
# 任务2:清洗数据(依赖任务1)
task_clean = Shell(name="清洗数据", command="python clean.py")
# 任务3:生成报表(依赖任务2)
task_report = Shell(name="生成报表", command="python report.py")
# 定义依赖关系
task_extract >> task_clean >> task_report
# 提交到 DolphinScheduler
pd.submit()
方式三:Open API(系统对接)
bash
# 用 curl 调用 REST API,适合和其他系统对接
curl -X POST http://你的DS地址:12345/dolphinscheduler/projects/项目名/process-definition \
-H "token: 你的令牌" \
-H "Content-Type: application/json" \
-d '{工作流定义JSON}'
适合的场景:你的其他系统(比如 DeerFlow AI Agent)通过 API 自动创建和触发工作流。
方式四:YAML 配置文件
yaml
# 用声明式的方式定义工作流(最新版本支持)
workflow:
name: 数据ETL流水线
tasks:
- name: 数据抽取
type: SHELL
command: echo "开始抽取..."
- name: 数据转换
type: SHELL
command: echo "开始转换..."
dependencies: [数据抽取]
四、工作原理(深入浅出)
4.1 整体架构:包工头 + 工人模式
┌──────────────┐
│ 用户/系统 │
│ (Web/API/SDK) │
└──────┬───────┘
│ 提交工作流
┌──────────────┼──────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ API Server │ │ API Server │ │ API Server │ ← 接收请求
│ (接口) │ │ (接口) │ │ (接口) │
└─────┬──────┘ └─────┬──────┘ └─────┬──────┘
│ │ │
└──────────────┼──────────────┘
▼
┌────────────────┐
│ ZooKeeper │ ← "签到表",管心跳/选举
└────────┬───────┘
│
┌──────────────┼──────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ Master 1 │ │ Master 2 │ │ Master 3 │ ← 包工头们
│ (活跃) │ │ (待命) │ │ (待命) │ 通过ZK选举,1个干活
└────┬─────┘ └──────────┘ └──────────┘ 其他随时准备接班
│ 分配任务
├──────────┬──────────┐
▼ ▼ ▼
┌────────┐ ┌────────┐ ┌────────┐
│Worker 1│ │Worker 2│ │Worker 3│ ← 工人们(真正执行任务)
│(执行A) │ │(执行B) │ │(执行C) │ 可以随时增加/减少
└────────┘ └────────┘ └────────┘
4.2 一个任务从提交到执行的完整旅程
以"凌晨2点自动跑每日报表"为例:
第1步:你创建工作流
┌─────────────────────────────┐
│ Web界面拖出: │
│ [抽取] → [清洗] → [报表] │
│ 定时:每天凌晨02:00 │
└──────────┬──────────────────┘
│ 保存到 MySQL
▼
┌─────────────────────┐
│ MySQL 数据库 │
│ t_ds_process_ │
│ definition 表 │ ← 工作流定义存在这里
└─────────────────────┘
第2步:凌晨2点到,触发调度
┌──────────────────────────────┐
│ Master 扫描一张"命令表" │
│ (t_ds_command) │
│ 发现有命令:"执行工作流#123" │
└──────────┬───────────────────┘
│ 解析依赖关系
▼
┌──────────────────────────────┐
│ Master 判断: │
│ [抽取] 没有依赖 → 立即分配 │
│ [清洗] 依赖[抽取] → 等它跑完 │
│ [报表] 依赖[清洗] → 再等等 │
└──────────┬───────────────────┘
│ 先分配"抽取"任务
▼
┌──────────────────────────────┐
│ Worker 接收任务: │
│ 1. 如果有脚本文件,从HDFS下载 │
│ 2. 创建临时目录 │
│ 3. 执行命令(如 python xxx) │
│ 4. 实时回报状态给 Master │
└──────────┬───────────────────┘
│
┌───────┼───────┐
▼ ▼ ▼
成功✅ 失败❌ 超时⏰
│ │ │
│ 自动重试3次 发告警
│ 还失败→告警 ↓
│ └───────┤
▼ ▼
[清洗]任务 短信/邮件/
自动触发 钉钉通知你
第3步:全部完成
┌──────────────────────────────┐
│ 所有任务状态更新到 MySQL │
│ Web界面 DAG 图全部变绿 ✅ │
│ 你可以随时查看每个任务的日志 │
└──────────────────────────────┘
4.3 核心机制详解
① DAG 依赖解析
工作流:[A] → [B] → [D]
↘
[C] → [E]
Master 这样解析:
- 第1轮:A 没有依赖 → 分配给 Worker
- 第2轮:A完成 → B 和 C 并行分配(它们互相不依赖)
- 第3轮:B完成 → 检查D:B✅ C❌ → D还不行,等着
C完成 → 检查D:B✅ C✅ → D可以跑了!
检查E:C✅ → E也可以跑了!
- 第4轮:D和E并行跑
- 完成!
② 去中心化高可用(HA)
Master挂了怎么办?
Master1(活跃) → 💥 挂了
↓
ZooKeeper 发现 Master1 心跳断了
↓
立即从 Master2、Master3 中选举新老大
↓
Master2 成为"活跃Master" ← 无缝接班
↓
正在跑的任务?一个不丢!新 Master 从数据库恢复状态
Worker 挂了怎么办?
Worker1 → 💥 挂了(正在执行任务A)
↓
Master 发现 Worker1 心跳断了
↓
任务A 自动重新分配到 Worker2
↓
Worker2 从头执行任务A ← 任务不丢!
③ 任务队列(防过载)
不是来一个任务就立刻压给 Worker
↓
任务先进入队列排队
↓
Master 根据 Worker 的负载情况分配
↓
Worker1 空闲 → 给 Worker1
Worker1 正在忙 → 等会儿或给 Worker2
↓
避免"一台机器累死,其他机器闲着"
五、总结三连
| 问题 | 答案 |
|---|---|
| 收费吗? | 开源版完全免费(Apache 2.0),商业版 WhaleScheduler 付费 |
| 依赖什么? | 必备:Java 1.8+、MySQL 5.7+、ZooKeeper 3.4.6+;可选:HDFS、Hadoop、Spark |
| 怎么用? | 4种方式:Web拖拽(最简单)、Python SDK(程序员最爱)、Open API(系统对接)、YAML(声明式) |
| 什么原理? | Master-Worker架构 + ZooKeeper HA + DAG依赖解析 + 任务队列防过载 |
记住一句话 :DolphinScheduler = 免费的分布式任务管家,装好 Java + MySQL + ZooKeeper 就能跑,打开浏览器拖拖拽拽就能用。Master(包工头)管分配,Worker(工人)管执行,谁挂了自动有人替上。
六、一句话厘清与DIFY/COZE的关系
DolphinScheduler = 数据流水线调度工
Dify / Coze = AI 应用搭建平台
它们的关系是互补协作,而非竞争替代。
七、生活化类比:三者的定位
想象你在经营一家连锁奶茶店 🧋:
| 角色 | 谁来做 | 对应工具 |
|---|---|---|
| 后端原料供应 | 每天凌晨从农场进货→清洗水果→切配→分装→送到各门店 | DolphinScheduler |
| 前端门店运营 | 研究新口味、调配配方、接待顾客、做奶茶、收银 | Dify / Coze |
DolphinScheduler 管的是"后台脏活累活"------数据从哪来、怎么加工、什么时候送。
Dify / Coze 管的是"前台智能体验"------用 AI 大模型和顾客对话、推荐口味、自动下单。
两者配合起来才是一套完整系统:后台数据准时送到,前台 AI 才有料可用。
八、核心差异对比表
| 维度 | DolphinScheduler | Dify | Coze(扣子) |
|---|---|---|---|
| 本质定位 | 数据任务调度引擎 | LLM 应用开发平台 | AI Bot 搭建平台 |
| 目标用户 | 数据工程师、运维 | 开发者、技术团队 | 零基础个人、运营、产品 |
| 「工作流」含义 | 数据加工流水线 | AI 推理流水线 | 对话逻辑流水线 |
| 核心能力 | 定时跑脚本、ETL调度 | RAG 知识库、多模型路由 | 智能体对话、插件调用 |
| 是否涉及AI | ❌ 不涉及大模型 | ✅ 核心能力 | ✅ 核心能力 |
| 处理对象 | 数据表、文件、日志 | 用户对话、文档、Prompt | 用户对话、Bot交互 |
| 开源/收费 | 开源免费(Apache 2.0) | 开源免费(社区版) | 基础免费+付费订阅 |
| 出品方 | Apache 基金会 | Dify.AI(中国创业公司) | 字节跳动 |
| 典型任务 | spark-submit、python etl.py |
调用GPT生成回复、RAG检索 |
回复用户消息、调用飞书发通知 |
九、各自的「工作流」长什么样?
虽然三者的界面都是"拖拽节点 + 连线",但节点里跑的东西完全不同:
DolphinScheduler 的工作流(数据处理流水线)
[凌晨2点:从MySQL抽取昨天订单]
↓
[Python脚本清洗重复数据]
↓
[Spark计算销售额、客单价] ← 大数据计算
↓
[SQL写入数据仓库]
↓
[Python生成Excel报表 → 邮件发送]
每个节点跑的是:Shell命令、Python脚本、Spark任务、SQL语句
Dify 的工作流(AI 推理流水线)
[用户输入:"帮我查一下昨天北京销量"]
↓
[LLM节点:理解意图,提取关键词"北京""昨天""销量"]
↓
┌────┴────┐
↓ ↓
[知识库检索] [HTTP请求节点]
查商品文档 调用数据库API
↓ ↓
└────┬────┘
↓
[LLM节点:整合信息,生成自然语言回复]
↓
["昨天北京地区销售额为128万元,环比增长5%..."]
每个节点跑的是:调用大模型、检索知识库、HTTP请求、代码执行
Coze 的工作流(Bot 对话流水线)
[用户在飞书群 @机器人:"今天天气怎么样?"]
↓
[意图识别节点:判断是天气查询]
↓
[插件节点:调用天气API]
↓
[LLM节点:把API结果转为自然语言]
↓
[回复:"今天北京晴,18-28℃,适合出行!"]
每个节点跑的是:智能体逻辑、插件调用、对话管理
十、它们的关系:互补协作,不是竞争
层次关系图
┌────────────────────────────────────────────────┐
│ 用户触点层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 微信/飞书 │ │ 网页聊天 │ │ API接口 │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ └──────────────┼──────────────┘ │
├──────────────────────┼──────────────────────────┤
│ AI 应用层(Dify / Coze) │
│ ┌──────────────────────────────────────────┐ │
│ │ RAG检索 · LLM对话 · Agent决策 · 插件调用 │ │
│ │ ↑ 需要数据支撑 ↑ │ │
│ └──────────────────────────────────────────┘ │
├─────────────────────────────────────────────────┤
│ 数据调度层(DolphinScheduler) │
│ ┌──────────────────────────────────────────┐ │
│ │ 数据抽取 → 清洗 → 计算 → 入仓 → 建索引 │ │
│ │ 定时执行 · 依赖管理 · 失败重试 · 监控告警 │ │
│ └──────────────────────────────────────────┘ │
├─────────────────────────────────────────────────┤
│ 数据存储层 │
│ ┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ MySQL │ │ Hive │ │ ES │ │向量数据库│ │
│ └────────┘ └────────┘ └────────┘ └────────┘ │
└─────────────────────────────────────────────────┘
DolphinScheduler 在底层,负责把原始数据加工好。
Dify/Coze 在上层,用加工好的数据提供 AI 智能服务。
十一、真实协作场景举例
场景:某电商公司的智能客服系统
┌─────────────────────────────────────────────────┐
│ DolphinScheduler 做的事(凌晨自动跑) │
│ │
│ [00:00] 从订单库抽取昨日所有订单 │
│ ↓ │
│ [00:30] 清洗数据,剔除测试订单、异常订单 │
│ ↓ │
│ [01:00] 更新「商品销量排名」表 │
│ [01:00] 更新「用户购买偏好」表 │
│ [01:00] 更新「库存实时状态」表 │
│ ↓ │
│ [02:00] 同步到Dify的知识库 → 让AI能查到最新数据 │
│ │
│ ← 每天自动、准时、不出错 │
└─────────────────────────────────────────────────┘
↓ 数据就绪
┌─────────────────────────────────────────────────┐
│ Dify / Coze 做的事(用户随时触发) │
│ │
│ 顾客问:"iPhone 15 Pro 有货吗?今天能发货吗?" │
│ ↓ │
│ LLM理解意图 → RAG从知识库检索iPhone 15库存 │
│ ↓ │
│ 数据层返回:库存32台,可当日发货 │
│ ↓ │
│ LLM生成回复:"您好!iPhone 15 Pro 目前库存32台, │
│ 今天16:00前下单可当日发货哦~" │
│ │
│ ← 智能、自然、实时 │
└─────────────────────────────────────────────────┘
没有 DolphinScheduler :AI 查到的是昨天的旧库存,可能出现"超卖"。
没有 Dify/Coze:用户查询需要人工客服,24小时排班成本高。
十二、快速判断:你该用哪个?
| 你的需求 | 用什么 |
|---|---|
| "每天凌晨自动跑数据清洗脚本" | DolphinScheduler |
| "管理100个Spark任务的依赖和重试" | DolphinScheduler |
| "搭建一个会聊天的AI客服" | Dify / Coze |
| "让AI能根据公司文档回答问题" | Dify(RAG能力强) |
| "5分钟做一个Bot发到飞书群" | Coze(零代码最快) |
| "既要AI客服智能回答,又要后台数据每天自动更新" | DolphinScheduler + Dify |
| "用自然语言说一句话就自动创建数据工作流" | DolphinScheduler + DeerFlow |
十三、总结:一句话记住三者关系
DolphinScheduler = 后厨切菜备料的自动化流水线 🥬→🔪→📦
Dify / Coze = 前厅招待顾客的AI服务员 💬→🧠→☕
一个是"把数据做熟",一个是"把AI用活"。
真正的企业方案 = DS管后端数据 + Dify/Coze管前端AI。
它们的关系不是"你死我活",而是"一个好汉三个帮"------各司其职,协同作战。