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的编排定位:它位于数据源与下游消费之间,作为"控制平面"协调多个执行平面。
二、学习目标与整体课程框架
本课程面向已经具备Python基础、了解基本ETL概念,但尚未系统掌握Airflow生产实践的工程师。学完后,你应当能够独立设计一条可重跑、可观测、可告警的金融ETL DAG,并能在失败时快速定位与恢复。具体目标如下:
- 掌握DAG、Task、Operator、TaskInstance、Data Interval等核心概念及其在金融批次中的语义。
- 能够使用BashOperator、PythonOperator、SQL相关算子与自定义Operator完成典型金融ETL链路。
- 掌握依赖编排、分支、动态任务映射、跨DAG触发等进阶编排手段。
- 能够设计分级重试策略,区分可重试错误与不可重试错误,并配置指数退避与告警。
- 掌握回填、补数、幂等设计与数据质量校验的工程方法。
整体课程分为六个模块,共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且无异常堆栈,说明环境基本可用。
四、常见误区与复盘
在正式进入DAG编写前,先明确几个高频误区,可以避免后续大量返工:
- 误区一:把Airflow当计算引擎。在PythonOperator中执行大规模数据转换,导致Worker内存溢出。正确做法是只做轻量编排,重计算交给Spark等外部系统。
- 误区二:忽略Data Interval语义。金融T+1批次中,任务实际处理的是"上一个数据区间"的数据,若按当前时间取数会导致数据错位。
- 误区三:重试策略一刀切。对所有任务统一设置
retries=3,但网络抖动与数据缺失需要完全不同的处理方式,后者重试再多次也不会成功。 - 误区四:DAG中写死日期。使用
datetime.now()而非模板变量,导致回填时数据范围错误。
本章完成了课程定位、学习目标、框架与环境四件事。接下来你将正式进入DAG的世界,从最基础的DAG定义与调度语义开始,逐步构建属于你自己的金融ETL编排能力。