请说明在 Airflow 中实现任务失败自动重试的机制,并介绍如何配置重试策略(包括重试次数、重试间隔等参数)。
考察说明
考查对 Airflow 任务重试机制及配置方法的理解。
回答思路
- 【回答框架 1】Airflow 通过 task 级别的重试参数控制自动重试,核心参数包括 retries 设置重试次数,retry_delay 设置每次重试间的等待时间,默认单位为 timedelta 对象。这些参数可在 DAG 定义中通过 default_args 统一设置,也可在单个 task 中覆盖。
- 【回答框架 2】重试过程由调度器根据 task 状态触发,当 task 实例失败且未超过最大重试次数时,会被重新调度执行;若达到最大重试次数仍失败,则任务标记为失败,并可能触发 on_failure_callback 等回调。重试时会记录尝试次数,可在 Airflow UI 的 task 详情中查看。
- 【回答框架 3】配置重试策略时,还可使用 retry_exponential_backoff 参数启用指数退避,使重试间隔随尝试次数增加;max_retry_delay 限制最大等待时间。这些参数共同构成完整的重试策略,适用于网络抖动或临时资源不足等场景。
- 【回答框架 4】高级配置可通过 timeouts 设置任务执行超时,避免任务无限运行;结合 retries 与 retry_delay 能有效提高任务成功率。实际配置需结合业务容忍度,如重试次数过多会延迟告警,过少则可能因瞬时失败导致任务失败。
- 【回答框架 5】在复杂 DAG 中,建议为不同任务设置差异化重试策略,例如数据敏感任务减少重试,外部接口任务增加重试并配合退避,同时监控重试指标以调整参数。[实际方案]
- 【关键点 1】retries 控制重试次数,retry_delay 控制间隔
- 【关键点 2】retry_exponential_backoff 启用指数退避,max_retry_delay 限制最大间隔
- 【关键点 3】默认通过 default_args 统一配置,task 级可覆盖
- 【关键点 4】调度器根据尝试次数决定重试或失败,失败可触发回调
- 【易错点 1】重试次数过大可能导致任务延迟长时间不被发现
- 【易错点 2】重试不解决代码逻辑错误,仅针对临时性失败