Azkaban、Xxl-Job與Airflow對比分析
概述
Xxl-Job
簡述
XXL-JOB是一個國內輕量級分散式任務排程平臺,其核心設計目標是開發迅速、學習簡單、輕量級、易擴充套件。基於Java技術棧,排程中心與執行器通訊基於作者另一個開源專案xxl-rpc,採用自建註冊中心,整體架構簡單明瞭,易於上手。
圖片來源:http://www.xuxueli.com/xxl-job/#/?id=_533-架構圖
專案地址
Github:xuxueli/xxl-job
Azkaban
簡述
Azkaban為LinkedIn開源的分散式工作流排程框架,專案起源於解決Hadoop Jop依賴管理問題,但實際已經是一個通用的工作流排程框架,適用於不同業務場景。
圖片來源:https://github.com/azkaban/azkaban/blob/master/docs/figures/azkaban2overviewdesign.png
專案地址
Github:azkaban/azkaban
Airflow
簡述
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,是因為它的管理介面確