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,是由於它的管理界面確實太很差用了。