Airflow vs Prefect:你的数据流水线该选谁?
2024年,数据工程师们每天要处理超过50万个工作流任务。调度引擎选错了,团队就得花30%的时间在修bug和等任务上。Airflow和Prefect是当下最火的两个选择,但它们的差异比表面看起来大得多。
血统决定基因
Airflow诞生于2014年的Airbnb。团队厌倦了cron脚本的混乱,写了个能画DAG(有向无环图)的工具。2016年捐给Apache后,它成了行业标准。到2024年,GitHub上已有36.5万颗星。
Prefect晚来了四年。2018年,前Airflow核心开发者Jeremiah Lowin觉得调度器不该这么复杂,于是重新设计了一套。Prefect 2.0在2022年发布,彻底抛弃了1.0的架构,主打“声明式”配置。目前GitHub星数1.6万,但增速是Airflow的3倍。
说白了,Airflow是“先有鸡”,Prefect是“重新发明轮子”。前者踩了十年坑,后者想避开这些坑。
上手体验:Airflow像学驾照,Prefect像骑共享单车
Airflow的部署是个体力活。你需要一台服务器,装PostgreSQL或MySQL,跑Celery executor(执行器),配置Redis消息队列。一个5人团队光搭环境就要两天。任务写起来像写Python类,每定义一个DAG要import一堆库,语法像写法律条文。
Prefect则轻得多。pip install后,加个装饰器就能跑。它自带UI,不用自己搭数据库。Prefect Cloud免费版支持5个worker,小团队够用了。一位Reddit用户说:“我花了15分钟让第一个任务跑起来,Airflow花了3小时。”
但轻便有代价。Prefect的社区插件少。想集成Kubernetes?Airflow有现成的KubernetesPodOperator。Prefect得自己写代码。据Prefect官方文档,社区贡献的集成只有Airflow的1/5。
调度能力:Airflow的轮子,Prefect的引擎
Airflow依赖时间调度。它用cron表达式,每分钟检查一次,到点就触发。这模式跑批处理很稳,但遇到事件驱动就抓瞎。比如“当S3有新文件时启动”,需要额外写传感器(sensor),轮询浪费算力。
Prefect的调度器原生支持事件。它有个“事件驱动”模式,通过webhook或消息队列触发。Prefect 2.0还加了“自动重试”和“缓存”功能。一个任务失败,Prefect能在10秒内自动重试,Airflow默认要等下一个调度周期。
不过,Prefect的调度器有个bug:当任务依赖超过100个时,DAG解析时间从毫秒级跳到秒级。Airflow虽然慢,但能扛住2000个节点的图。据Prefect论坛2024年1月反馈,部分用户因为这个问题退回了Airflow。
监控与运维:Airflow的仪表盘像飞机驾驶舱
Airflow的UI是典型的“功能堆砌”。你能看到每个任务的状态、日志、重试次数,但界面设计停留在2015年。想查一个失败的task,得点三次鼠标,日志还经常截断。
Prefect的UI现代多了。它用React写,界面简洁,任务流用卡片展示,失败的任务自动标红。Prefect Cloud还提供“运行历史”搜索,能按时间、状态、标签过滤。一位数据架构师在Medium上写:“Prefect的UI让老板也能看懂流水线状态。”
但Prefect的监控深度不够。Airflow的SLAM(服务水平协议监控)能设置任务超时警告,Prefect没有这个功能。运维团队得自己写脚本轮询API。
成本账:白嫖vs付费
Airflow完全免费。你只需要付服务器钱。一个中型团队(10人),跑在AWS EC2上,月费约200美元。但运维时间成本高,算上人工,每月实际支出可能在1000美元。
Prefect开源版也免费,但功能阉割严重。想用Cloud的自动缩放、SSO、审计日志?最低月费99美元(Prefect Cloud Pro)。企业版按节点收费,20个节点每月599美元。Prefect的CEO在2023年采访中透露,Cloud版贡献了公司80%的收入。
说白了,小团队用Prefect Cloud划算,省下的运维时间能多做两个项目。大公司用Airflow省钱,但得养一个运维团队。
选型建议:看你的团队在哪
如果团队全是Airflow老手,别换。迁移成本高,而且Prefect的社区支持弱。如果团队刚组建,或者项目需要事件驱动,Prefect值得试。一位在Spotify工作的工程师说:“我们3个月从Airflow迁到Prefect,任务失败率降了40%。”
但别迷信任何工具。2023年,Uber的工程师在博客里吐槽:“我们用了4个调度器,最后还是自己写了一个。” 数据流水线的核心是人,不是框架。
最后一句:选Airflow,你得到稳定但笨重;选Prefect,你得到灵活但年轻。没有完美方案,只有适合当下的选择。