乐知付加密服务平台

如果你有资源, 平台可以帮你实现内容变现, 无需搭建知识付费服务平台。

点击访问官方网站 https://lezhifu.cc

扫码关注公众号 乐知付加密服务平台-微信公众号
airflow的check机制介绍 | chenzuoli's blog

airflow的check机制介绍

我们使用airflow的其中一个原因,就是管理任务流,及任务流之间的依赖关系。

desert

传统的任务调度,大概就是通过linux自带的crontab方式进行任务的定时调度,那么如果crontab任务过多,crontab表达式是按照顺序执行的,那么怎么完成复杂的依赖问题呢。

airflow就可以解决复杂的依赖问题,任务流之间如何串行、并行执行,只需定义一个crontab表达式即可,但是这个表达式,不是交给linux,而是有airflow自己的调度引擎,去发现该任务是否到时间点去执行了。

那么airflow是怎样解决任务流之间的依赖问题的呢?

task之间依赖关系

看下图:
flow

在dag的定义文件中,包含了task的定义及task之间的依赖关系,依赖关系有2中方式:

1
2
3
task1 >> task2
task1.set_downstream(task2)
task2.set_upstream(task1)

上面的三种定义task依赖关系的模式,表示task2是task1的下游。

dag之间依赖关系

目前airflow提供的dag之间依赖关系是一种sensor:ExternalTaskSensor
它可以添加如下几个主要参数:

1
2
3
4
external_dag_id     --上游dag_id
external_task_id --上游task_id,如果不设置,那么检查dag状态
execution_delta --上游与本任务调度时间差
execution_date_fn --上游与本任务调度时间差计算方法

总结一下

总结一下,如果任务量非常多,dag任务达到千个级别,那么依赖关系会非常复杂,而且面对频繁的变动dag调度时间,如果上游改变了调度时间,下游的依赖时间差execution_delta没做相应的改变,那么会依赖失败,所以,airflow自带的dag之间依赖会有缺陷。

目前我们生产上的解决办法就是,重写check,下游dag不依赖上游dag的具体时间,而是根据上游设置的调度时间schedule_interval计算出来对应的调度时间,进行检查,上游上一批次的状态,这样就完美解决了上游修改调度时间,导致下游check失败的问题,因为下游的check机制,会自动获取上游的调度时间。

ok,今天就到这里,如果你们还有什么地方不了解的,可以跟我提。
我的邮箱是:

1
chenzuoli709@163.com

Keep reading, Keep writing, Keep coding.

欢迎关注我的微信公众号,比较喜欢分享知识,也喜欢宠物,所以做了这2个公众号:
程序员写书

喜欢宠物的朋友可以关注:【电巴克宠物Pets】
电巴克宠物

一起学习,一起进步。

-------------本文结束感谢您的阅读-------------