章节摘要:本章把第 1 章的最小图展开成可维护的生产 DAG。你要掌握时间窗口与默认参数如何变成 SLA、Operator 与 Hook 如何对接外部系统、依赖边与 XCom 与触发规则如何表达因果、以及 TaskFlow 与动态映射何时能少写样板、何时会撑爆解析。读完应能独立写一条带校验分支、小纸条传路径、按列表映射子任务的流水线。
阅读完本章,你应当能够:
金句:边决定谁有资格跑,XCom 只决定跑的时候看见哪张小纸条。把表塞进纸条,账本会先抗议。

时间坐标、补数开关、并发上限、默认契约、动态工厂。配置是时空约束,不是填空。
Connections、Hooks、Operators 三角;专用算子与 Python 算子;依赖库在 Worker 上而不在你的笔记本上。
结构边、触发规则、外部等待;XCom 的体积与序列化;TaskGroup 与 SubDAG 的取舍。
装饰器写法、映射展开、部分失败、与传统 Operator 混编。映射是循环的图化,不是运行时随便长环。
参数定时钟,算子定双手,边与纸条定配合,映射定如何把一件事复制成一组工位。
2.1 时钟与契约 ──► 2.2 双手对接外部 │ ├► 2.3 工位之间怎么配合 └► 2.4 一组工位如何批量展开
2.1 先把时钟校准:同一个 dag_id 下,手动触发与计划触发用的都是数据区间,不是墙上的“现在”。把 catchup、max_active_runs、depends_on_past 写成变更说明里的必填项,而不是复制粘贴默认值。2.2 把外部系统接进来时,按“连接是否登记、Worker 是否有包、网络是否放行”三问排障,不要对着调度器日志猜 SQL。2.3 画边的同时写触发规则,清理任务与告警任务是规则的第一对客户。2.4 只有列表长度会变、且需要实例级重试时才上映射,先用两三个元素验证 map_index,再谈几百个分区。
本章代码都是语义草稿。平台不让写保存路径,你把片段放进自己的 DAG 定义即可。重点是字段含义:postgres_conn_id 指向抽屉,trigger_rule 指向汇聚条件,expand 指向账本行数。抄完能跑仍要能解释这三句,才算读过本章。
类比从车间换成车站时刻表:窗口是车次,任务是停站,XCom 是站间交接的小纸条,映射是同一车次挂多节同型车厢。车厢太多,调度员的账本会先厚过铁轨。
把 default_args 当成可有可无的模板注释,会在每个任务上漏 retries 或漏 owner,告警无处可去。把 XCom 当成“方便的 return”,会在第一次传数据帧时把元数据库写成瓶颈。把映射当成 Python for 的语法糖,会在分区数翻十倍的那天让调度器按行数窒息。把 SubDAG 当成封装银弹,会把调度嵌套进另一张图,排障时要跳两层 UI。这四条误判都在本章各节展开,章页上先立牌,避免有人只读 2.2 就去接生产库。
本章结束后,你写的应是可评审的合同:窗口、边、规则、纸条体积、映射上限。看不出合同的代码,只是能解析的脚本。能解析不等于能合并。合并标准在第 6 章,但素材从本章开始积累。
第 3 章会解释为何解析必须无副作用:因为文件处理子进程会反复 import 你在 2.1 写下的工厂。第 5 章会把 2.3 的外部等待升级为 Dataset 或 deferrable。第 6 章会把 2.1 的 catchup 与 2.3 的边变成断言。本章自己要交的作业是:一条带清理旁路、路径型 XCom、映射不超过演示规模的 DAG,doc_md 写清窗口。交不出作业就不要用“我们已上 Airflow”对外宣传。宣传应对得起合同字段。
本章四节是写作量最大的一章,允许分两天读,但不允许跳过 2.3 直接写映射。映射放大的是实例,实例遵循的是规则。规则没写对,放大只是把错误复制成 N 份。N 份错误的日志看起来像平台不稳。平台不稳的错觉,会把责任从作者推到执行器。推错责任,第 3 章的选型会一起歪。所以 2.3 是闸门。闸门后面才是 2.4 的效率。效率没有闸门,就是事故生成器。生成器很勤快。勤快不是美德。
读 2.3 时亲手把清理任务的规则改错一次,看临时目录是否永不删除。看见了,规则才不是关键字。关键字不能保护汇聚。汇聚要靠失败演练。演练过再写映射。映射只放大你已经演练过的规则。这是本章的最后一口令。口令过了,才配读执行器。执行器不负责你的规则。规则在图上。图在本章。本章结束于规则被亲眼看见。看见结束跳读。跳读结束事故生成。生成结束于闸门。闸门是 2.3。2.3 过了,2.4 才是效率。效率服从规则。规则服从演练。演练服从失败。失败服从你愿意点一次错的 trigger_rule。愿意,本章才算读完。读完才能进入第 3 章问谁搬箱子。搬箱子的人不管规则。管规则的是你。你在 2.3。2.3 在闸门。闸门在本章。本章完。