Airflow任务实际执行日期与渲染模板日期不符问题咨询
对Airflow execution_date核心逻辑的误解
Airflow的execution_date并非任务实际运行时间,而是任务对应处理的数据周期的标识。例如配置每日凌晨1点运行的任务(schedule_interval: '0 1 * * *'),24日凌晨1点触发的任务,其execution_date会标记为23日——因为该任务用于处理23日全天的数据,Airflow设计逻辑为“周期结束后运行任务”,因此用前一天的日期作为execution_date。若误将该日期当作任务运行日期,就会产生“识别错误”的判断。时区配置不匹配
若DAG未指定timezone参数,Airflow默认使用UTC时区。假设期望本地时区(如北京时间)凌晨1点运行任务,而UTC凌晨1点对应本地时间9点,那么本地24日凌晨1点看到的任务,实际是Airflow在UTC23日17点触发的,execution_date自然为23日。同时,下次运行时间会按UTC的1点计算,与预期的本地时间错位,看起来像是任务延迟了一天。start_date设置不当
若start_date设置未考虑时区转换,比如用本地时间设置start_date=datetime(2024,5,23),但Airflow以UTC解析该日期(东8区下,本地23日0点对应UTC22日16点),这会导致调度周期计算错位,使得Airflow识别的execution_date始终滞后一天,进而影响下次运行时间的计算结果。catchup参数的潜在影响
若catchup=True(Airflow默认值),在24日发布DAG且start_date设为23日时,Airflow会自动补跑23日周期的任务(于24日1点执行)。若此时时区或schedule_interval配置存在问题,Airflow可能错误判定24日周期的任务已完成,导致下次运行时间仍显示为24日1点,形成“延迟”的错觉。
内容的提问来源于stack exchange,提问作者Ema Il

