XXL-JOB是一个国内轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。基于Java技术栈,调度中心与执行器通讯基于做者另外一个开源项目xxl-rpc,采用自建注册中心,总体架构简单明了,易于上手。git
图片来源:http://www.xuxueli.com/xxl-job/#/?id=_533-架构图
github
Github:xuxueli/xxl-jobsql
Azkaban为LinkedIn开源的分布式工做流调度框架,项目起源于解决Hadoop Jop依赖管理问题,但实际已是一个通用的工做流调度框架,适用于不一样业务场景。apache
图片来源:https://github.com/azkaban/azkaban/blob/master/docs/figures/azkaban2overviewdesign.png
架构
Github:azkaban/azkaban框架
Apache-Airflow 是Airbnb开源的一款数据流程工具,已经在Apache孵化成功,成为Apache的顶级项目。以很是灵活的方式来支持数据的ETL过程,同时还支持很是多的插件来完成诸如HDFS监控、邮件通知等功能。Airflow支持单机和分布式两种模式,支持Master-Slave模式,支持Mesos等资源调度,有很是好的扩展性。运维
图片来源:https://www.jianshu.com/p/2ecef979c606
分布式
Github:apache/airflow微服务
功能 | Xxl-job | Azkaban | Airflow |
---|---|---|---|
license | GNU General Public License v3.0 | Apache License, Version 2.0 | Apache License, Version 2.0 |
调度模块 | Quartz | Quartz | 自实现 |
调度中心HA | 支持,基于Quartz集群实现 | 不支持 | 不支持 |
执行器HA | 支持 | 支持 | 支持 |
业务耦合度 | 高,业务逻辑在执行器中实现 | 低,与实际业务无耦合。 | 低,与实际业务无耦合。 |
Job类型 | Java | Command、HadoopShell、Java、HadoopJava、Pig、Hive等,支持插件式扩展 | Python、Bash、HTTP、Mysql等,支持Operator的自定义扩展。 |
Executor触发 | RPC | Restful | Restful |
工做流 | 无,可配置任务级联触发 | 支持,自定义DSL语法 | 支持,基于Python DAG |
管理界面 | 简单但不美观,符合国人习惯,上手简单 | 简单,美观程度略胜于xxl-job,总体功能逻辑清晰,上手简单 | 该有的功能都有,可是就是让你用得不爽。 |
部署运维 | 简单 | 简单 | 较复杂,包括WebServer、Scheduler、Worker和Flower(可选,用于) |
单点故障 | 无 | Web Server存在单点故障风险 | Scheduler存在单点故障风险。 |
Xxl-Job、Azkaban与Airflow三者目标定位有所不一样,Xxl-Job是一个轻量级分布式的任务调度框架,Azkaban则是为了解决Hadoop的任务依赖关系问题,而Airflow则是通用的批量数据处理。工具
Xxl-Job依赖于Xxl-Rpc,能够认为是一个微服务系统,调度中心是服务消费者,调度器是服务提供者,只是服务调用不是经过访问而是经过定时触发而已。
Azkaban重心则在工做流调度,经过DSL语法定义工做流,同时支持子工做流,子工做流能够在主工做流中调度,也可单独调度。
Airflow基于Dag也能够定义复杂的工做流,属于Python技术栈。 整体来讲,若是是简单的定时任务调度,能够选择Xxl-Job,与主流Java框架Spring结合很好,上手简单快捷,功可以用;若是调度任务有明确的workflow,须要对workflow状态进行监控分析,则建议使用Azkaban,之因此不选择Airflow,是由于它的管理界面确实太很差用了。