fangpsh's blog

Airflow 并发trigger DAG 的问题

有一个小服务使用了airflow,会把比较耗时的离线任务丢到airflow 处理。 在需要的时候触发(trigger_dag)这些任务。最近发现一小部分任务没成功,对应的dag 下也没找到日志记录,看起来是没触发成功。 在airflow-web-server 中发现了异常日志:

Run id ... already exists for dag id ...

看了下代码:incubator-airflow/airflow/api/common/experimental/trigger_dag.py

未指定run_id 的情况下,run_id 默认为utcnow,并且还默认去掉了microsecond。这样的话,对同一个dag 大量并发trigger 的时候,run_id 很容易相同。

临时的解决方法,在trigger dag 时指定下run_id。我临时改成了 utcnow+uuid4,应该不会再撞上了吧,不然就是中彩票了。