我正在研究Airflow
的来龙去脉,以结束我们所有的Cron
困境。当试图模仿(CeleryExecutor
)worker
s的故障时,我陷入了Sensor
s的困境。我正在使用ExternalTaskSensor
来将顶级DAG
关联在一起,如here所述。
我目前的理解是,自Sensor
is just a type of Operator
起,它必须继承BaseOperator
的基本特征。如果我杀死一个worker
(docker container
),则所有普通(非Sensor
)在其上运行的task
个在其他worker
个上重新安排。
但是杀死worker
时,ExternalTaskSensor
不会重新安排在其他worker
上;而是卡住了
然后发生以下两种情况之一:
ExternalTaskSensor
被标记为失败,但是工作流恢复(发生了几次,但我没有屏幕截图)docker container
(包括正在运行scheduler
/ celery
的那些),然后重新启动它们,然后停滞ExternalTaskSensor
重新安排时间,工作流程恢复。有时需要docker container
的几个停止-启动周期才能使卡住的ExternalTaskSensor
重新恢复 Sensor
在单个docker container
停止启动循环后仍然停留
Sensor
在几个docker container
停止启动周期后恢复
我的问题是:
docker
是否在这种奇怪的行为中起作用?Sensor
(尤其是ExternalTaskSensor
)和其他operator
之间是否存在差异?Sensor
上运行的worker
也被重新计划?Airflow 1.9.0-4
Python 3.6-slim
CeleryExecutor
与redis:3.2.7
这是我的代码的link。