一 .背景
今天跟客户聊天的时候,聊到了调度系统,抛出三个顾虑 :
调度系统现在市面上的调度系统那么多,比如老牌的Airflow, Oozie,Kettle,xxl-job ,Spring Batch等等, 为什么要选DolphinScheduler ?
其他的调度产品用的都是主流的语言比如java,调度底层都是用的quartz,稳定性都不错啊,功能/技术都差不多啊,为啥选他 ?
DolphinScheduler我之前都没听过,这么新的东西我为什么要选他,为他承担风险 ? 别人来质疑我的选型的时候,咋怼回去 ?
仔细一听都没毛病.是差不多啊. 那么为啥要选DolphinScheduler ???
在我的观念里面,没有最好的, 只有结合自身的业务/技术情况挑选最合适的技术产品.
那么接下来, 我从自身的使用情况来说一下,为什么要选型DolphinScheduler ?
- 注 : 本文的内容仅仅是个人观点,如果有不合适的地方欢迎指正…
二 .定位
为什么上来就说定位呢, 主要是为了缩小对比的范围.
DolphinScheduler 的定位是 大数据 工作流 调度 .
我把 大数据 和 工作流 做了重点标注. 从而可以知道 DolphinScheduler的定位是针对于大数据体系.
我这搞的是大数据平台, 目前主流的大数据调度组件有 : Oozie、Azkaban、Airflow 所以本文只是针对这三个技术做对比.
注 : kettle,xxl-job ,Spring batch 的定位任务调度,非大数据体系,对大数据体系的支持较弱,而且普遍都非HA,存在单点故障. 因为产品定位的不同,所以不做对比.
三 .案例
市场的认可度是检验产品价值的唯一真理.
我在调研技术的时候,如果市场认可度不高,那么基本就直接放弃了.
老牌调度Oozie、Azkaban、Airflow 我就不细说了,毕竟是老牌调度.市场的认可度和使用情况大家应该都使用过或者听说过.
DolphinScheduler从2019年3月正式发布第一个开源1.0.0版本到现在, 貌似到现在才两年的时间, 所以重点说一下.
- Apache DolphinScheduler 部分用户 (排名不分先后)
看到下面的图我们发现很多大的企业在使用调度, 据不完全统计,至少有400家企业在使用. 官方统计地址
-
易观千帆
-
360奇安信
-
优路科技
- T3 出行
四 .竟品对比
在大数据领域, DolphinScheduler 对标的开源产品是 oozie、Azkaban、Airflow .
因为公司的主流开发语言是Java , 考虑到成本维护之类的因素,因为Airflow使用的语言是Python , 跟公司的技术栈不匹配. 所以先排除掉 .
对比情况如下 :
DolphinScheduler | Azkaban | Oozie | |
---|---|---|---|
社区状况 | |||
所属社区 | apache | apache | |
社区活跃度 | 高 | 中 | 低 |
稳定性 | |||
单点故障 | 去中心化的多Master和多Worker | 是 单个Web和调度程序组合节点 | 是 |
HA | 支持 (HA需要依赖ZK,资源中心 | 支持 | 不支持[待确认] |
过载处理 | 任务队列+多种任务分配策略+自我保护机制 | 任务过多服务器卡顿 | 任务过多服务器卡顿 |
易用性 | |||
DAG监控界面 | 任务状态、任务类型、重试次数、任务运行机器、可视化变量等关键信息一目了然 | 部分任务相关信息 | 部分任务相关信息 |
可视化流程定义 | 支持 [所有的流程定义都是可视化的,通过拖拽任务来绘制DAG, 配置数据源以及资源.对于第三方系统,提供api操作] | 否[编码配置] | 否[编码配置] |
快速部署 | 一键部署 | 部署相对复杂 | 部署相对复杂 |
容器化部署 | 支持 | 否 | 否 |
功能 | |||
是否支持暂停和恢复 | 支持 | 否 | 否 |
是否支持多租户 | 支持 | 否 | 否 |
任务类型 | 传统的shell 、python任务, 同时支持大数据平台任务调度: MR、Spark、Flink、SQL、DataX、Sqoop等等 | shell、gobblin、hadoopJava、java、hive、pig、spark、hdfsToTeradata、teradataToHdfs等 | Pig,Hive,Sqoop和Distcp,Spark |
可视化数据源管理 | 支持 | 不支持 | 不支持 |
可视化文件管理 | 支持 [需要依赖外部存储比如HDFS,S3A,minIO] | 不支持 | 不支持 |
手动/定时触发任务 | 支持 | 支持 | 支持 |
告警 | 支持 [ 邮件/企业微信/钉钉/自扩展 ] | 支持 | 待确认 |
扩展 | |||
自定义任务类型 | 支持 | 支持 | 不支持 |
支持集群扩展 | 是 调度器使用分布式调度,整体的调度能力会随集群的规模线性增长,Master/Worker支持动态扩容/缩容 | 是 [相对复杂] | - |
表格中的信息如果有不严谨的地方,欢迎指正.
我们在看一下DolphinScheduler技术栈 :
后端: SpringBoot (2.x)
前端: VUE
编译: Maven(3.3+) ,
元数据存储: Mysql5.5+
分布式无中心化设计: ZooKeeper(3.4.6+)
统一资源管理 : 共享存储[HDFS、S3A、MinIO]
主流技术栈,二次开发基本零门槛 .
五 .DolphinScheduler简介
Apache DolphinScheduler 于 17 年在易观数科立项, 19 年 3 月开源,8 月进入 Apache 孵化器, 已累计有 400+ 公司在生产上使用.
一个分布式易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。
其主要目标如下:
* 以DAG图的方式将Task按照任务的依赖关系关联起来,可实时可视化监控任务的运行状态
* 支持丰富的任务类型:Shell、MR、Spark、SQL(mysql、postgresql、hive、sparksql),Python,Sub_Process、Procedure等
* 支持工作流定时调度、依赖调度、手动调度、手动暂停/停止/恢复,同时支持失败重试/告警、- 从指定节点恢复失败、Kill任务等操作
* 支持工作流优先级、任务优先级及任务的故障转移及任务超时告警/失败
* 支持工作流全局参数及节点自定义参数设置
* 支持资源文件的在线上传/下载,管理等,支持在线文件创建、编辑
* 支持任务日志在线查看及滚动、在线下载日志等
* 实现集群HA,通过Zookeeper实现Master集群和Worker集群去中心化
* 支持对Master/Worker cpu load,memory,cpu在线查看
* 支持工作流运行历史树形/甘特图展示、支持任务状态统计、流程状态统计
* 支持补数
* 支持多租户
* 其他....
- 系统优势
- 主要能力
- 可视化流程
- K8s 支持
六 .社区发展
DolphinScheduler为国内开源项目,相对其他国外项目,有天然的本土优势.
截止目前 DolphinScheduler 共建立了8个用户群,1个开发种子群,1个开发者群. 总人数4000+, 截止目前对DolphinScheduler做过贡献的开发者有220+ . 社区活跃度很高.
目前开源对比情况如下(数据统计时间截止月2021年2月底):
项目名称 | Start数量 | Fork数量 | Issue数量 | Contributors 数量 |
---|---|---|---|---|
Airflow | 22.6k | 8.9k | 16795 | 1654人 |
DolphinScheduler | 6.1k | 2.2k | 5930 | 222 人 |
Azkaban | 3.8k | 1.5k | 2903 | 108人 |
Oozie | 0.615k | 0.445k | – | 17人 |
七.性能数据参考
- 生产环境
易观千帆是每天需要处理数百亿条数据,月活 6.2亿,6.8 PB 的大数据集群经过每天上万个任务 ETL 处理加工而产生的 SaaS 服务应用。
- 压测
因为执行任务的类型不同,所消耗的cpu/内存/网络/磁盘的资源也不同,因为执行大数据体系任务都是将任务统一提交到Yarn集群,仅仅是提交一个shell指令. 为了模拟, 所以该测试数据仅为执行shell脚本, 数据仅为参考,请以实际环境为准.
机配置为 :
5台物理 16核 32g内存 千兆网卡.
线程总数: 16 * 5 = 80
内存总数: 32 * 5 = 160G
压测结果:
并行任务数量在 8000+
数据库连接数据: 1100+
cpu占用 10% +
内存占用 40%+
调整参数:
master.exec.threads=6000
master.exec.task.num=20
worker.exec.threads=6000
内存配置:
Api : 4G
Master : 4G
Worker: 4G
参考资料来源清单:
https://github.com/apache/incubator-dolphinscheduler
https://github.com/apache/incubator-dolphinscheduler-website
https://mp.weixin.qq.com/s/s0oi5woJs_gb1Sgkp1jkyA
https://blog.csdn.net/DolphinScheduler/article/details/112174473
https://github.com/azkaban/azkaban
https://github.com/apache/airflow