1. 课程导入

欢迎进入《Airflow金融ETL DAG编排与重试实战》。在金融数据平台中,数据链路往往横跨行情接入、清算对账、风控指标、监管报送等多个域,任务之间既有严格的时序依赖,又有明确的时效窗口。Airflow之所以成为金融ETL编排的主流选择,核心在于它把"任务依赖"从脚本里的隐式约定,变成了可版本化、可观测、可重跑的DAG声明。本章不写复杂DAG,而是先把定位、目标、框架和环境四件事讲清楚,为后续29章的实战打下共同语言。

一、核心原理:Airflow在金融ETL中的定位

Airflow的本质是"以DAG为中心的调度与编排平台",它不负责搬运数据本身,而是负责决定"谁在什么条件下、什么时间、以什么顺序执行"。理解这一点非常关键:很多初学者把Airflow当成ETL工具,结果把大量数据转换逻辑塞进PythonOperator,导致调度器负载过高、重试语义混乱。正确的分工是——Airflow管编排、依赖、重试、告警与回溯;真正的抽取与加载交给外部系统或专用算子。

在金融场景中,Airflow承担四类典型职责:

  • 时序编排:如"行情落地完成 → 因子计算 → 风控指标 → 报送文件生成"的串行依赖。
  • 窗口控制:通过data_interval_start/end与catchup控制T+1批次的补数范围。
  • 失败恢复:借助retries、retry_delay、retry_exponential_backoff实现分级重试。
  • 可观测性:通过Task Instance状态、日志与SL A监控,快速定位断点。

下面这张图展示了金融ETL中Airflow的编排定位:它位于数据源与下游消费之间,作为"控制平面"协调多个执行平面。

Airflow 作为金融ETL的控制平面 数据源 行情 / 交易 / 清算 外部文件 / API 数据库增量表 Airflow 控制平面 Scheduler Executor Metadata DB Web UI 下游消费 风控指标 / 报表 监管报送 / 数据服务 对账文件 执行平面(外部系统) Spark / Flink 计算集群 数据仓库 / 数据湖 文件系统 / 消息队列 触发/监控

二、学习目标与整体课程框架

本课程面向已经具备Python基础、了解基本ETL概念,但尚未系统掌握Airflow生产实践的工程师。学完后,你应当能够独立设计一条可重跑、可观测、可告警的金融ETL DAG,并能在失败时快速定位与恢复。具体目标如下:

  1. 掌握DAG、Task、Operator、TaskInstance、Data Interval等核心概念及其在金融批次中的语义。
  2. 能够使用BashOperator、PythonOperator、SQL相关算子与自定义Operator完成典型金融ETL链路。
  3. 掌握依赖编排、分支、动态任务映射、跨DAG触发等进阶编排手段。
  4. 能够设计分级重试策略,区分可重试错误与不可重试错误,并配置指数退避与告警。
  5. 掌握回填、补数、幂等设计与数据质量校验的工程方法。

整体课程分为六个模块,共30章:

模块 章节范围 核心内容
导入与环境 第1章 定位、目标、框架、环境准备
核心概念与DAG基础 第2–7章 DAG结构、调度语义、Operator、依赖、变量与连接
金融ETL编排实战 第8–15章 行情、清算、对账、指标、报送链路编排
重试与容错 第16–22章 重试策略、退避、超时、告警、幂等与断点恢复
可观测与运维 第23–27章 日志、监控、SLA、回填、性能调优
综合项目与复盘 第28–30章 端到端项目、故障复盘、最佳实践

三、实战环境准备

为避免"本地能跑、线上报错",建议使用与生产一致的Airflow版本。本课程以Airflow 2.7+为例,采用Docker Compose方式启动本地环境,包含Scheduler、Webserver、PostgreSQL元数据库与Celery Worker。核心步骤如下:

# 1. 拉取官方docker-compose.yaml
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.7.3/docker-compose.yaml'

# 2. 初始化环境变量与目录
mkdir -p ./dags ./logs ./plugins ./config
echo -e "AIRFLOW_UID=$(id -u)" > .env

# 3. 初始化元数据库
docker compose up airflow-init

# 4. 启动全部服务
docker compose up -d

# 5. 访问Web UI
# http://localhost:8080  默认账号/密码:airflow / airflow

启动后,建议先验证三个关键点:Web UI能否正常登录、Scheduler日志是否持续输出心跳、示例DAG是否出现在列表中。若Scheduler日志出现Heartbeat且无异常堆栈,说明环境基本可用。

环境建议:本地开发使用Docker Compose,生产环境建议使用Kubernetes Executor或Celery Executor配合独立元数据库。金融场景务必开启元数据库备份与审计日志,DAG文件纳入Git版本管理。

四、常见误区与复盘

在正式进入DAG编写前,先明确几个高频误区,可以避免后续大量返工:

  • 误区一:把Airflow当计算引擎。在PythonOperator中执行大规模数据转换,导致Worker内存溢出。正确做法是只做轻量编排,重计算交给Spark等外部系统。
  • 误区二:忽略Data Interval语义。金融T+1批次中,任务实际处理的是"上一个数据区间"的数据,若按当前时间取数会导致数据错位。
  • 误区三:重试策略一刀切。对所有任务统一设置retries=3,但网络抖动与数据缺失需要完全不同的处理方式,后者重试再多次也不会成功。
  • 误区四:DAG中写死日期。使用datetime.now()而非模板变量,导致回填时数据范围错误。
复盘提醒:金融ETL对数据准确性要求极高,任何"重试成功但数据重复"的情况都可能引发对账差异。请在后续章节中重点关注幂等写入与唯一键约束,不要仅以任务状态变绿作为成功标准。

本章完成了课程定位、学习目标、框架与环境四件事。接下来你将正式进入DAG的世界,从最基础的DAG定义与调度语义开始,逐步构建属于你自己的金融ETL编排能力。