调度与编排面试专题
概述
调度与编排面试覆盖:DAG 调度原理、任务依赖设计、Airflow 架构、补数策略、调度系统选型。本文按原理、设计、架构、场景四类整理高频问答。
一、DAG 调度原理
Q1:为什么用 DAG 调度任务?
DAG = 有向无环图:
任务 = 节点
依赖 = 边
无环(防死锁)
可并行Q2:调度系统怎么触发任务?
1. 时间触发:Cron 判断到点
2. 依赖触发:上游完成后
3. 手动触发
4. 数据触发(可选)调度流程:
扫描定义 → 判断触发 → 生成实例
→ 分发执行 → 状态更新Q3:DAG 任务并发怎么控制?
| 手段 | 说明 |
|---|---|
| 并行度 | 全局限制 |
| 依赖 | DAG 内约束 |
| 池/Pool | 资源池 |
| 队列 | 隔离 |
二、任务依赖
Q4:任务依赖有哪些类型?
| 依赖 | 说明 |
|---|---|
| 任务级 | DAG 上下游 |
| 数据级 | 数据就绪 |
| 时间级 | 跨天 |
| 外部 | 外部系统 |
Q5:跨 DAG 依赖怎么做?
Airflow:ExternalTaskSensor
Dolphin:依赖任务
等待上游完成/数据就绪Q6:依赖设计原则?
1. 显式依赖(不靠时间猜)
2. 最小依赖(降耦合)
3. 可检查(数据就绪校验)
4. 无环(防死锁)三、Airflow 架构
Q7:Airflow 核心组件?
Scheduler:调度
Executor:执行器
Worker:执行节点
Web:UI
DB:元数据Q8:Celery 与 Kubernetes 执行器区别?
| 对比 | Celery | Kubernetes |
|---|---|---|
| Worker | 常驻 | 动态 Pod |
| 启动 | 快 | 慢 |
| 资源 | 固定 | 弹性 |
| 运维 | 管理 Worker | 管理 K8s |
Q9:Airflow 怎么保证任务不重复?
幂等设计:
任务可重跑
结果覆盖
(调度本身 at-least-once)Q10:XCom 能传大数据吗?
XCom 适合小数据(参数/状态)
大数据存外部(HDFS/DB)
通过路径/引用传递四、补数据策略
Q11:什么时候需要补数?
1. 历史任务失败
2. 数据错误修正
3. 新任务回填历史
4. 逻辑变更重算Q12:补数怎么做?
1. 明确日期范围
2. 幂等执行
3. 并行/分批
4. 校验结果| 方式 | 说明 |
|---|---|
| catchup | 补历史调度 |
| 手动指定 | 精确范围 |
| 分批 | 控制资源 |
| 级联 | 下游联动 |
Q13:补数要注意什么?
1. 幂等(可重跑)
2. 资源(分批)
3. 依赖(下游)
4. 校验(对账)
5. 窗口(错峰)五、调度系统选型
Q14:Airflow vs DolphinScheduler?
Airflow:Python 代码化,复杂编排
Dolphin:可视化,国内生态| 对比 | Airflow | Dolphin |
|---|---|---|
| 定义 | 代码 | 可视化 |
| 语言 | Python | Java |
| 易用 | 中 | 高 |
| 生态 | Python 广 | 国内 |
Q15:Oozie 还值得用吗?
Oozie:Hadoop 老牌(XML)
新项目不建议
存量迁移Q16:调度系统怎么选?
1. 团队技术栈
2. 编排复杂度
3. 可视化需求
4. 运维能力
5. 生态六、任务治理
Q17:任务优先级怎么设计?
分级:
P0 关键(SLA 严格)
P1 重要
P2 普通
P3 可延迟
优先级 + 队列 + 资源Q18:任务互相干扰怎么办?
资源隔离:
队列(容量/抢占)
租户
配额
错峰Q19:任务失败怎么处理?
1. 自动重试(指数退避)
2. 告警通知
3. 失败定位(日志)
4. 修复重跑
5. 下游补偿七、场景设计题
Q20:数据平台调度架构?
调度服务 + 执行引擎:
可视化 DAG(Dolphin)
/ 代码化(Airflow)
+ 队列资源 + 监控告警 + 补数Q21:每日凌晨大量任务如何不拥塞?
1. 错峰(分时段)
2. 优先级调度
3. 队列隔离
4. 依赖编排(先上游)
5. 扩容执行节点Q22:上游延迟导致下游等怎么办?
1. 超时/告警
2. 数据就绪检查
3. 下游弹性(重跑)
4. 依赖解耦(消息)八、高频易错点
| 易错点 | 正确理解 |
|---|---|
| DAG 可以有环 | 必须无环 |
| 调度一定不重 | 幂等兜底 |
| XCom 传大数据 | 只传小数据 |
| 补数直接全量 | 分批 + 校验 |
| 依赖靠时间 | 显式依赖 |
| 单调度器够 | 生产要 HA |
九、速答清单
| 高频题 | 一句话答案 |
|---|---|
| DAG 原理 | 任务依赖无环图 |
| 触发方式 | 时间/依赖/手动 |
| Airflow 架构 | Scheduler+Executor+Worker |
| Celery vs K8s | 常驻 vs 动态 |
| 补数策略 | 幂等 + 分批 |
| Airflow vs Dolphin | 代码 vs 可视化 |
| 资源隔离 | 队列/租户 |
| 失败处理 | 重试 + 告警 + 重跑 |