DolphinScheduler - 核心原理、特点、以及架构详解
作者:hangge | 2025-06-07 09:10
1,什么是 DolphinScheduler?
(1)DolphinScheduler(原 EasyScheduler)是由中国易观公司开源的一款分布式、去中心化、易扩展的可视化 DAG 工作流任务调度平台。该平台致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中“开箱即用”。
(2)DolphinScheduler 于 2021 年 3 月 18 日正式成为 Apache 顶级项目,中文名为“海豚调度”。
(3)DolphinScheduler 比较符合中国人的使用习惯,目前在分布式任务调度系统领域也占据一定地位,在国内已经有大量的知名企业和科研机构在使用。
2,DolphinScheduler 的功能
(1)DolphinScheduler 主要用于解决数据研发 ETL 过程中错综复杂的依赖关系、不能直观监控任务健康状态等问题。
(2)DolphinScheduler 以 DAG 流的方式将 Task 组装起来,可以实时监控任务的运行状态,同时支持重试、从指定节点恢复失败、暂停及 Kill 任务等操作,页面效果如下图所示:

3,DolphinScheduler 的特点
- 高可靠性:去中心化的多 Master 和多 Worker 服务对等架构,避免单 Master 压力过大,另外采用任务缓冲队列来避免过载。
- 简单易用:提供了 DAG 监控界面,所有流程的定义都是可视化的,通过拖拽任务来定制 DAG,通过 API 方式与第三方系统集成,支持一键部署。
- 丰富的使用场景:支持多租户,支持暂停恢复操作。紧密贴合大数据生态,支持 Spark、Hive、MR、Python、Sub_process、Shell 等近 20 种任务类型。
- 高扩展性:支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master 和 Worker 支持动态上下线。
4,DolphinScheduler 的核心架构
(1)DolphinScheduler 的核心架构主要由 MasterServer、WorkerServer、Registry、Alert、API 和 UI 这些组件组成:

(2)MasterServer 采用分布式无中心设计理念,MasterServer 主要负责 DAG 任务切分、任务提交监控,并同时监听其它 MasterServer 和 WorkerServer 的健康状态。 MasterServer 服务启动时向 Zookeeper 注册临时节点,通过监听 Zookeeper 临时节点变化来进行容错处理。 MasterServer 基于 netty 提供监听服务。该服务内主要包含:
- DistributedQuartz:分布式调度组件,主要负责定时任务的启停操作,当 quartz 调起任务后,Master 内部会有线程池具体负责处理任务的后续操作;
- MasterSchedulerService:是一个扫描线程,定时扫描数据库中的 t_ds_command 表,根据不同的命令类型进行不同的业务操作;
- WorkflowExecuteRunnable:主要是负责 DAG 任务切分、任务提交监控、各种不同事件类型的逻辑处理;
- TaskExecuteRunnable:主要负责任务的处理和持久化,并生成任务事件提交到工作流的事件队列;
- EventExecuteService:主要负责工作流实例的事件队列的轮询;
- StateWheelExecuteThread:主要负责工作流和任务超时、任务重试、任务依赖的轮询,并生成对应的工作流或任务事件提交到工作流的事件队列;
- FailoverExecuteThread:主要负责 Master 容错和 Worker 容错的相关逻辑;
(3)WorkerServer 也采用分布式无中心设计理念,WorkerServer 主要负责任务的执行和提供日志服务。 WorkerServer 服务启动时向 Zookeeper 注册临时节点,并维持心跳。 WorkerServer 基于 netty 提供监听服务。该服务包含:
- WorkerManagerThread:主要负责任务队列的提交,不断从任务队列中领取任务,提交到线程池处理;
- TaskExecuteThread:主要负责任务执行的流程,根据不同的任务类型进行任务的实际处理;
- RetryReportTaskStatusThread:主要负责定时轮询向 Master 汇报任务的状态,直到 Master 回复状态的 ack,避免任务状态丢失;
(4)ZooKeeper 服务:系统中的 MasterServer 和 WorkerServer 节点都通过 ZooKeeper 来进行集群管理和容错。另外系统还基于 ZooKeeper 进行事件监听和分布式锁。 官方也曾经基于 Redis 实现过队列,不过希望 DolphinScheduler 依赖到的组件尽量地少,所以最后还是去掉了 Redis 实现。
(5)AlertServer 提供告警服务,通过告警插件的方式实现丰富的告警手段。
(6)ApiServer 是 API 接口层,主要负责处理前端 UI 层的请求。该服务统一提供 RESTful api 向外部提供请求服务。
(7)UI 是系统的前端页面,提供系统的各种可视化操作界面。
5,DolphinScheduler 的运行模式
DolphinScheduler 主要支持以下 3 种运行模式。
- 单机模式(Standalon):不需要额外部署第三方依赖组件,直接运行即可,内置支持 H2Database 和 Zookeeper Testing Server。
- 伪集群模式(Pseudo-Cluster):需要依赖数据库(PostgreSQL 或 MySQL)和注册中心(ZooKeeper)环境。
- 集群模式(Cluster):基础依赖环境同伪集群模式,唯一的区别是伪集群模式针对的是一台机器,而集群模式针对的是多台机器。
全部评论(0)