airflow.cfg 主要管什么
airflow.cfg 控制调度节拍与并发上限:parallelism 是整个 Airflow 同时运行任务数的上限,max_active_tasks_per_dag 限制单个 DAG 的任务并行,max_active_runs_per_dag 限制单个 DAG 的实例并行,dag_dir_list_interval 决定多久扫描一次 DAG 目录。调参前先量清任务平均时长与槽位占用情况,否则只是在不同瓶颈之间来回搬问题。
基本信息
| parallelism | 整个 Airflow 同时运行的任务数上限 |
|---|---|
| max_active_tasks_per_dag | 单个 DAG 同时运行的任务数 |
| max_active_runs_per_dag | 单个 DAG 并行运行的实例数 |
| dag_dir_list_interval | DAG 目录扫描间隔,单位秒 |
典型使用场景
- 并发提不上:确认 parallelism 与 worker 槽位是否匹配
- 补数冲突:限制 max_active_runs,避免多个实例写同一分区
- 新 DAG 上线:dag_dir_list_interval 决定多久能被发现
- 调度延迟:min_file_process_interval 影响 DAG 解析频率
- 容量评估:按 parallelism 与平均任务时长估算吞吐上限
并发相关配置
并发相关配置
[core]
parallelism = 64 # 全局并行上限
max_active_tasks_per_dag = 16 # 单 DAG 任务并行
max_active_runs_per_dag = 2 # 单 DAG 实例并行
dag_dir_list_interval = 300 # 每 300 秒扫描一次 DAG 目录
min_file_process_interval = 30 # DAG 解析最小间隔(秒)
catchup_by_default = False # 新建 DAG 不自动补历史关键参数与影响
| 参数 | 调大的效果 | 代价 |
|---|---|---|
| parallelism | 全局吞吐提升 | 调度器与元数据库压力上升 |
| max_active_tasks_per_dag | 单 DAG 跑得更快 | 抢占全局槽位,影响其他 DAG |
| max_active_runs_per_dag | 补数更快 | 同分区并发写,要求任务幂等 |
| dag_dir_list_interval | 新 DAG 更快可见 | 调度器解析开销上升 |
| min_file_process_interval | 解析更及时 | 大 DAG 目录下 CPU 占用升高 |
调大 max_active_runs 前先确认任务幂等与分区隔离,否则补数会和日常跑数互相覆盖,数据错乱后还很难定位是哪个实例写进去的。
只调 parallelism 不看 worker 的实际并发槽位,全局上限再高也用不起来;两处配置要一起调,并以实际观察到的排队时长验证效果。
配置改动的落地方式
airflow.cfg 的改动要分角色看待:调度器相关参数改完需要重启 scheduler 才生效,worker 相关参数要重启 worker,部分参数(如 dag_dir_list_interval)只影响扫描行为。生产环境应把配置纳入版本管理,并区分「环境级差异」与「临时应急调整」——临时改大的并行度若没有记录,事后没人知道当时的容量边界在哪里,下一轮容量评估只能靠猜。