1. 背景
目前生产使用的版本v1.7官方已不再维护,且过于落后,官方维护的最低版本是1.10.1
airflow老版本的问题比较多,随着业务发展已不能很好支持当前使用场景,故需升级到2.X
1.1 airflow 版本情况
airflow 2014年开始开发,2016年发布第一个版本1.7.X,2019年成为Apache 项目
目前最新版本2.3.3 (20220705)
2. 2.X新特性
airflow 2.0是一个主要的版本(超级大的版本更新),不仅仅 UI 更新了,最核心的组件 Scheduler 性能也有了极大的提升,分布式环境下的高可用模型也做了改变,同时还有 Airflow 上的 Operator 和 Hook 也做了新的分门别类
官方介绍如下: https://airflow.apache.org/blog/airflow-two-point-oh-is-here/
2.1 TaskFlow API
引入了编写DAG的新方法: TaskFlow API 一种新的编写dags的方式
DAGs现在更容易进行编写,特别是在使用到PythonOperator的时候.任务之间的依赖更清楚,XCom更加的好用.
2.2 UI
崭新的用户界面(Refreshed UI)
我们已经给 Airflow UI a visual refresh 并更新了一些样式.
2.3 Scheduler性能提升
之前 Scheduler 的分布式执行是使用主从模型,但是在 Airflow 2.0 改成了主主模型,我的理解是就是基于元数据库,所有的 Scheduler 都是对等的。带来的优势就是:
● 之前崩溃的调度程序的恢复时间主要依赖于外部健康检查第一时间发现识别故障,但是现在停机时间为零且没有恢复时间,因为其他主动调度程序会不断运行并接管操作。
● 支持读单个调度程序进行更改,而不会影响其他调度程序。
对于某个单 Scheduler 来说,1.7 就引入了 DAG 序列化,通过使 Web 服务器无需解析 DAG 文件而允许它读取序列化的DAG,大大提高了 DAG 文件的读取性能。Airflow 2.0 Scheduler 通过使用来自数据库的序列化后 DAG 进行任务调度和调用,扩展了 DAG 序列化的使用。这减少了重复解析 DAG 文件以进行调度所需的时间。
官方压测结果
官方提供的一份性能对比图,如下:
benchmarking configuration was: 4 Celery Workers, PostgreSQL DB, 1 Web Server, 1 Scheduler.
Results for 1,000 tasks run, measured as total task latency (referenced below as task lag).
吞吐量是随着schedulers线性增长的
2.4 Task Groups
SubDAGs were commonly used for grouping tasks in the UI, but they had many drawbacks in their execu