核心要点

  • 数据编排用 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、写入带去重键、避免追加式累加。这样无论运行几次,结果都收敛到唯一正确状态。

追问 2Backfill 回填要注意什么?

回填会并发跑大量历史分区,需控制并发避免压垮下游与集群;任务必须按分区幂等以免污染已有数据;注意上游历史数据是否齐全、口径是否随时间变更,必要时分批回填并校验结果一致性。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。