Airflow Knowledge Graph#

本文档把所有 Airflow 的知识点汇总在一起, 不对知识内容做详细解释, 只是梳理一遍知识点和这些知识点的作用, 以及列出相关文档. 以便查阅.

调度相关#

  • 简单的单步任务:

  • 简单的两步任务, 串行:
  • 简单的两步任务, 并行:
  • 使用第三方 Python 包: 如果你有很多任务会需要不同的第三方包, 你很难找到一个通用的依赖配置, 如何让不同的 task 有不同的依赖层?

  • 在相邻的两个 Task 之间传递数据:

  • 在任意的两个 Task 之间传递小数据: 任意的意思是它们可能不相邻
  • 在任意的两个 Task 之间传递大数据: 任意的意思是它们可能不相邻

  • Poll for Job Status 模式: 远程异步调用位于 Airflow 之外的任务, 并查询任务状态, 直到任务完成或失败
  • Failure tolerance in parallel tasks: 在多个并行任务的下一步都指向同一个任务时, 这一批并行任务到底允不允许部分失败? 能允许多少?
  • 单个任务失败重试: 任务失败后, 重试多少次? 重试间隔是多少? 要不要以 exponential backoff 的方式等待? 相关文档:
  • Timeout: 对单个 task 或者整个 dag 设定 timeout
  • 条件分叉执行: 一个任务之后接着多条链路, 根据这个任务的结果判断我们选择哪条链路执行. 相关文档:
  • 断路器: 一个任务执行完之后, 根据结果选择是否要提前结束整个链路.

    -Short circuit Operator: 对断路器模式的介绍. - ShortCircuitOperator: 实现断路器的 operator 的 API 文档.

开发技巧相关#

  • 老式的 context manager + operator 的写法:

  • 新式的 task flow decorator 的写法:
  • 用 UI 运行的 Dag 时使用 fancy 的表单界面来决定输入的 parameters:
  • 给你的 Airflow 环境添加 Variables 并在 task 中访问这些 Variables:
  • 在多个 Task 之间分享 dataset 数据, 从而避免每个 task 都要 IO:
  • 用 Code 来生成 Dag 以及里面的逻辑而不是手写函数定义 dag:
  • 动态的创建多个 Task: 常用语根据输入的参数, 启用 N 个 (N 是变量) parallel task 的情况.

安全相关#

  • 如何在 Airflow 中保存敏感数据, 例如数据库连接信息: