数据岗位面试题更新 2026-08-05

在 Airflow 中,DAG 的依赖管理通常涉及任务依赖(如 set_upstream、set_downstream 和 bitwise 运算符)以及跨 DAG 依赖(如 ExternalTaskSensor 和 TriggerDagRunOperator)。版本控制方面,DAG 文件通常存储在代码仓库中,并遵循一定的发布流程。请阐述 Airflow 实现 DAG 依赖管理和版本控制的具体机制和最佳实践。

数据技术原理方案权衡问题排查Apache Airflow

考察说明

考查候选人对 Airflow 中 DAG 依赖管理和版本控制机制的理解,以及实际应用中的最佳实践。

回答思路

  1. 【回答框架 1】任务依赖:通过 set_upstream 和 set_downstream 方法显式设置依赖,或使用位移运算符 >> 和 << 实现简洁的依赖链。依赖关系最终构成有向无环图(DAG),调度器基于此图决定任务执行顺序。
  2. 【回答框架 2】跨 DAG 依赖:可以使用 ExternalTaskSensor 监听另一个 DAG 中任务的状态,或使用 TriggerDagRunOperator 触发下游 DAG。此外,还可通过 datasets 实现事件驱动或数据感知的调度,但版本不同支持程度不同。
  3. 【回答框架 3】版本控制:DAG 文件应作为代码纳入 Git 等版本控制系统,遵循代码审查、测试(如单元测试、任务执行测试)和发布流程。使用 CI/CD 自动部署 DAG 文件到 Airflow 环境。
  4. 【回答框架 4】版本管理:对 DAG 的修改应保持幂等性,使用模板参数和变量减少硬编码。可对 DAG 文件打标签或使用分支管理不同环境(如 dev、prod)的版本,并考虑使用多环境部署策略(如 K8s 多集群)隔离。
  5. 【回答框架 5】回溯与审计:利用 Airflow 的元数据库记录 DAG 版本变更历史,便于追踪和回滚。结合代码仓库的提交历史,实现问题排查和合规审计。
  6. 【关键点 1】Airflow 通过 BaseOperator 的上下游方法和位移操作符实现任务级依赖,DAG 本质是有向无环图。
  7. 【关键点 2】跨 DAG 依赖可用 ExternalTaskSensor 或 TriggerDagRunOperator,但需注意执行日期对齐和失败处理。
  8. 【关键点 3】DAG 版本控制核心是代码化,使用 Git 管理,通过 CI/CD 自动部署,并注意保持 DAG 的幂等性。
  9. 【关键点 4】使用变量和模板(如 {{ ds }}, {{ dag_run.conf }})提高 DAG 的可配置性和可复用性,降低版本迭代成本。
  10. 【易错点 1】跨 DAG 依赖时,ExternalTaskSensor 若配置不当可能造成死锁或任务长时间挂起,需设置合理的超时和重试策略。
  11. 【易错点 2】版本控制中直接修改 DAG 文件可能导致任务历史丢失,应使用增量更新或创建新 DAG 来管理重大变更。
  12. 【易错点 3】忽略 Airflow 元数据库备份,可能导致调度状态丢失,影响版本回滚和问题排查。