传感器不会因工作人员故障而重新安排

时间:2018-07-21 11:42:37

标签: docker airflow airflow-scheduler

我正在研究Airflow的来龙去脉,以结束我们所有的Cron困境。当试图模仿(CeleryExecutorworker s的故障时,我陷入了Sensor s的困境。我正在使用ExternalTaskSensor将顶级DAG关联在一起,如here所述。

我目前的理解是,自Sensor is just a type of Operator起,它必须继承BaseOperator的基本特征。如果我杀死一个workerdocker container),则所有普通Sensor )在其上运行的task个在其他worker个上重新安排。


但是杀死worker时,ExternalTaskSensor不会重新安排在其他worker上;而是卡住了 Stuck ExternalTaskSensor

Logs of ExternalTaskSensor after worker was killed

然后发生以下两种情况之一:

  • 我一直等待几分钟,然后有时ExternalTaskSensor被标记为失败,但是工作流恢复(发生了几次,但我没有屏幕截图)
  • 停止所有docker container(包括正在运行scheduler / celery的那些),然后重新启动它们,然后停滞ExternalTaskSensor重新安排时间,工作流程恢复。有时需要docker container的几个停止-启动周期才能使卡住的ExternalTaskSensor重新恢复

stuck sensor

Sensor在单个docker container停止启动循环后仍然停留

stuck sensor resumes after docker container restart

Sensor在几个docker container停止启动周期后恢复


我的问题是:

  • docker是否在这种奇怪的行为中起作用?
  • 计划/重试行为方面,Sensor(尤其是ExternalTaskSensor)和其他operator之间是否存在差异?
  • 如何确保Sensor上运行的worker也被重新计划?

我将puckel/docker-airflow

一起使用
  • Airflow 1.9.0-4
  • Python 3.6-slim
  • CeleryExecutorredis:3.2.7

这是我的代码的link

0 个答案:

没有答案