技术选型-分布式任务调度系统

调研:

  1. 现在的开源调度系统分为两类:以Quartz为代表的定时类调度系统和以DAG为核心的工作流调度系统。

  2. 首先看看定时类调度系统,它们的设计核心是定时运行、数据分片和弹性扩容,但是对依赖关系支持的不太友好,更适用于后端业务开发 。

  3. 数据团队最常见的操作是的 ETL (抽取、转换和加载数据),更强调的是任务的依赖关系,所以关注点便是以DAG为核心的工作流调度系统了。

以Quartz为代表的定时类调度系统(挑选比较流行的)

Elastic-Job:是由当当网基于quartz 二次开发之后的分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成。定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。支持分布式调度协调、弹性扩容缩容、失效转移、错过执行作业重触发、并行调度、自诊断和修复等等功能特性。

Xxl-Job:是大众点评员工徐雪里于2015年发布的分布式任务调度平台,是一个轻量级分布式任务调度框架,支持通过 Web 页面对任务进行 CRUD 操作,支持动态修改任务状态、暂停/恢复任务,以及终止运行中任务,支持在线配置调度任务入参和在线查看调度结果。

Saturn:是唯品会基于elastic-job开发的分布式定时任务调度框架,能够实现集中化统一配置、基于exector负载的任务分片调度、任务监控告警及api任务管理等平台功能,更重要的是其还支持docker,同时saturn(开源版本)中的任务不仅支持java,还支持shell脚本。

PowerJob:(原OhMyScheduler)是全新一代分布式调度与计算框架,支持CRON、API、固定频率、固定延迟等调度策略,提供工作流来编排任务解决依赖关系,使用简单,功能强大,文档齐全。

以DAG为核心的工作流调度系统(挑选比较流行的)

Apache DolphinScheduler:DolphinScheduler曾用名为“EasyScheduler”,由易观开发,美国时间2019年8月29日,正式通过顶级开源组织Apache基金会的投票决议,以全票通过的优秀表现正式成为Apache孵化器项目。是一个分布式去中心化,易扩展的可视化DAG工作流任务调度系统。致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用。

Apache Oozie:由Cloudera公司贡献给Apache的基于工作流引擎的开源框架,是用于Hadoop平台的开源的工作流调度引擎,用来管理 Hadoop 任务。Oozie 是基于 XML 格式进行开发的,后续集成到 Hue 里可以可视化配置,但是缺点也很明显,版本管理、日志收集都不太友好,开发灵活性很差,可调度的任务也很少,另外定义过于复杂,维护成本很高。当然最核心还是没有共用变量和共用连接信息的概念。

Apache Airflow:是Airbnb开源的一款数据流程工具,已经在Apache孵化成功,成为Apache的顶级项目。以非常灵活的方式来支持数据的ETL过程,同时还支持非常多的插件来完成诸如HDFS监控、邮件通知等功能。Airflow支持单机和分布式两种模式,支持Master-Slave模式,支持Mesos等资源调度,有非常好的扩展性。

Azkaban:是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流内以一个特定的顺序运行一组工作和流程。Azkaban定义了一种KV文件格式来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。和 Oozie 差不多,缺点也很明显,最核心的问题还是没有共用变量和共用连接信息的概念。

以Quartz为代表的定时类调度系统对比

featureSaturnXxl-JobElastic-Job
依赖jdk1.7+,Maven 3.0.4+,node.js 8.7.0+,npm 5.4.2+,gitmysql ,jdk1.7+ , maven3.0+jdk1.8+, zookeeper 3.6.x+ ,maven3.0.4+ ,mesos
调度中心HA支持支持支持
执行器HA支持支持支持
弹性扩容通过zookeeper实现服务的注册、协调及控制能支持容器化技术进行 executor 扩容和减容,保证高峰期处理能力的弹性伸缩。使用 Quartz 基于数据库的分布式功能,服务器超出一定数量会给数据库造成一定的压力。通过zookeeper的注册与发现,可以动态的添加服务器, 支持水平扩容。
动态分片策略支持多种分片策略,可自定义分片策略。分片广播任务以执行器为维度进行分片,支持动态扩容执行器集群从而动态增加分片数量,协同进行业务处理;在进行大数据量业务操作时可显著提升任务处理能力和速度。人工指定资源分配策略 + 自动平均策略结合。
阻塞处理策略zookeeper的session timeout超时,临时节点会被清除,作业重新分片单机串行、丢弃后续调度、覆盖之前的调度zookeeper的session timeout超时,临时节点会被清除,作业重新分片
失败处理策略支持异常检测和失败转移,超时报警,超时强杀调度失败时的处理策略,策略包括:失败告警(默认)、失败重试;弹性扩容缩容在下次作业运行前重分片,但本次作业执行的过程中,下线的服务器所分配的作业将不会重新被分配。失效转移功能可以在本次作业运行中用空闲服务器抓取孤儿作业分片执行。同样失效转移功能也会牺牲部分性能。
监控告警支持,需要自己接口实现任务调度失败时邮件通知的邮箱地址,支持配置多邮箱地址,配置多个邮箱地址时用逗号分隔通过事件订阅方式可自行实现
日志可追溯支持日志查看,同时支持jstack和gc log备份到executor日志目录(executor版本大于3.0.0)支持,有日志查询界面可通过事件订阅的方式处理调度过程的重要事件,用于查询、统计和监控。Elastic-Job目前提供了基于关系型数据库两种事件订阅方式记录事件。
触发规则时间、事件触发时间、事件触发时间触发
DAG支持作业编排,作业编排将作业形成一个有向无环图,按照图的顺序依次调用。支持简单的子任务和任务依赖,不支持完整的DAG任务计划支持
管理界面同Elastic-Job,可以进行任务重启,并提供了一键摘流量、一键dump等Executor运维功能进行任务创建、编辑,编辑GLUE代码,操作作业禁用\启用、停止和删除等生命周期,可以查看调度日志,任务进度监控,任务依赖,数据加密,邮件报警(提供了钉钉报警API,可以进行二次开发),运行报表,国际化有运维平台,提供了快捷修改作业设置,作业和服务器维度状态查看,操作作业禁用\启用、停止和删除等生命周期,但停止的任务不可以重启,无报警机制
容器部署DockerDocker计划支持
缺点需要引入zookeeper , mesos, 增加系统复杂度, 学习成本较高调度中心通过获取 DB锁来保证集群中执行任务的唯一性, 如果短任务很多,随着调度中心集群数量增加,那么数据库的锁竞争会比较厉害,性能不好。需要引入zookeeper , mesos, 增加系统复杂度, 学习成本较高
部署运维复杂简单复杂
难易程度复杂简单复杂
GitHub上star数1.9k15.6k6.5k
LicenseApache License 2.0GNU General Public License v3.0Apache License 2.0
文档一般比较完善比较完善
社区一般,更新慢比较活跃,更新快重新活跃起来,更新比较快
开源时间2016.122015.122015.9
开源组织唯品会大众点评当当网,2020.6,成为Apache ShardingSphere的子项目,正式迁入Apache仓库

以DAG为核心的工作流调度系统对比

featureApache DolphinSchedulerApache AirflowAzkaban
单点故障去中心化的多Master和多Worker是,单一调度程序是,单个Web和调度程序组合节点
HA额外要求不需要(本身就支持HA)Celery / Dask / Mesos + Load Balancer + DBDB
过载处理任务队列机制,单个机器上可调度的任务数量可以灵活配置,当任务过多时会缓存在任务队列中,不会造成机器卡死任务太多时会卡死服务器任务太多时会卡死服务器
DAG监控界面任务状态、任务类型、重试次数、任务运行机器、可视化变量等关键信息一目了然不能直观区分任务类型只能看到任务状态
可视化流程定义是,所有流程定义操作都是可视化的,通过拖拽任务来绘制DAG,配置数据源及资源。同时对于第三方系统,提供api方式的操作。否,通过python代码来绘制DAG,使用不便,特别是对不会写代码的业务人员基本无法使用。否,通过自定义DSL绘制DAG并打包上传
是否能暂停和恢复支持暂停,恢复操作否,只能先将工作流杀死再重新运行否,只能先将工作流杀死再重新运行
是否支持多租户支持,easyscheduler上的用户可以通过租户和hadoop用户实现多对一或一对一的映射关系,这对大数据作业的调度是非常重要的。
任务类型支持传统的shell任务,同时支持大数据平台任务调度: MR、Spark、SQL(mysql、postgresql、hive、sparksql)、Python、Procedure、Sub_ProcessBashOperator、DummyOperator、MySqlOperator、HiveOperator、EmailOperator、HTTPOperator、SqlOperatorshell、gobblin、hadoopJava、java、hive、pig、spark、hdfsToTeradata、teradataToHdfs
与大数据契合度支持大数据作业spark,hive,mr的调度,同时由于支持多租户,与大数据业务更加契合由于不支持多租户,在大数据平台业务使用不够灵活由于不支持多租户,在大数据平台业务使用不够灵活
是否支持自定义任务类型
是否支持集群扩展是,调度器使用分布式调度,整体的调度能力会随便集群的规模线性增长,Master和Worker支持动态上下线是,但是复杂Executor水平扩展是,但是复杂Executor水平扩展
部署运维一键部署集群化部署复杂集群化部署复杂
难易程度简单复杂复杂
GitHub上star数4.4k18.3k3.4k
LicenseApache License 2.0Apache License 2.0Apache License 2.0
文档完善比较完善完善
社区活跃,更新快比较活跃,更新快比较活跃,更新快
开源时间2019.92014.102014.1
开源组织易观开源,ApacheApacheLinkedin
  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值