核心要点
数据编排用 DAG 描述任务间依赖,确保上游完成后才触发下游
提供定时/事件触发的调度,统一管理众多 ETL 作业的执行时序
内置失败重试、告警、超时与回填(backfill 补跑历史区间)能力
提供运行状态、日志、血缘的可观测性;代表工具 Airflow、DolphinScheduler
标准回答
要解决的问题
真实数据管道由大量相互依赖的任务组成(抽取→清洗→聚合→导出),手工 cron 难以表达依赖、处理失败重试、保证顺序与可观测。数据编排器用 DAG(有向无环图)把任务及其依赖显式建模,调度引擎据此决定执行顺序与并发。
核心能力
1)依赖管理:只有上游成功后下游才运行,避免脏数据下游计算。
2)调度触发:按 cron/时间分区或外部事件(数据到达、传感器 Sensor)触发。
3)容错:失败自动重试、超时控制、告警通知,单任务失败不影响无关分支。
4)回填(Backfill):按历史时间分区批量补跑,修数据或新接管道初始化。
5)可观测:统一查看运行状态、日志、耗时与任务血缘,便于排障与 SLA 管理。
代表工具
Airflow 用 Python 代码定义 DAG,生态丰富、扩展性强;DolphinScheduler 提供可视化拖拽与更适合国内大数据栈的调度能力。它们让复杂 ETL 管道变得可靠、可维护、可追溯。
常见误区
⚠️ 常见踩坑
编排器负责"调度与依赖编排",不等于"数据处理引擎",重活应下推给 Spark/Flink 等,别在调度节点上跑大计算。还要保证任务幂等,否则重试与回填会产生重复或脏数据。
追问
追问 1:为什么要求任务幂等,如何实现?
重试和回填会让同一任务多次运行,非幂等会导致数据重复或叠加。实现上:按分区先删后写(overwrite 对应分区)、用主键 upsert、写入带去重键、避免追加式累加。这样无论运行几次,结果都收敛到唯一正确状态。
追问 2:Backfill 回填要注意什么?
回填会并发跑大量历史分区,需控制并发避免压垮下游与集群;任务必须按分区幂等以免污染已有数据;注意上游历史数据是否齐全、口径是否随时间变更,必要时分批回填并校验结果一致性。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。