气流工作者-连接断开:IncompleteRead(读取0个字节)

时间:2019-03-15 06:21:39

标签: python airflow airflow-scheduler

将Airflow worker和webserver / scheduler用作在EC2的Kubernetes Engine上运行的Docker映像

我们有一个任务,其中getUserAsSingle() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .doOnSuccess(user -> ui.showUser(user)) .flatMap(user -> getUserFavoritesAsSingle(user) .subscribeOn(Schedulers.io()) ) .observeOn(AndroidSchedulers.mainThread()) .doOnSuccess(userFavs -> ui.showUserFavorites(userFavs)) .flatMap(userFavs -> updateLoginCounter(userFavs.userId) .subscribeOn(Schedulers.io()) ) .observeOn(AndroidSchedulers.mainThread()) subscribe(newCounter -> ui.showLoginCount(newCounter), error -> ui.showError(error)); 占用大量资源,每15分钟运行一次。

将这些错误作为电子邮件发送给气流工作人员

KubernetesPodOperator

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

所以,迟到总比没有好

这是由于KubernetesPodOperator中的已知错误。 为了避免这种行为,您必须将运算符get_logs参数设置为False。默认值为True

在这里详细 https://issues.apache.org/jira/browse/AIRFLOW-3534 https://issues.apache.org/jira/browse/AIRFLOW-5571

答案 1 :(得分:0)

好吧,这意味着thge程序逻辑没有获得它期望从某个套接字接收的数据。这可能意味着任何事情,从间歇性的网络问题到数据根本无法及时到达以及未编程等待逻辑的数据。如果任务自动重试,您甚至不必担心间歇性问题。

如果您想进一步诊断,则需要收集一些诊断信息。问题总是通过相同的情况来诊断:

  1. 当问题显现出来时,确定程序中的确切位置。
  2. 检查程序当时的状态,找出哪个值是错误的。
  3. 将错误值追溯到其起源。

第一个可以通过堆栈跟踪和/或在代码库中搜索相关逻辑来标识。第二个-调试或调试打印。第三步通常是通过在产生错误值的逻辑步骤中,以较早设置的断点重新运行程序来完成的。在您的情况下,只能通过等待问题再次发生来非常缓慢地执行此操作,因此您不得不从代码库中进行有根据的猜测。