Google cloud dataflow 数据流作业以“停止”;“处理暂停”;

Google cloud dataflow 数据流作业以“停止”;“处理暂停”;,google-cloud-dataflow,apache-beam,spotify-scio,Google Cloud Dataflow,Apache Beam,Spotify Scio,通过使用会话窗口与相当高级的组一起运行流数据流管道,我在运行了几个小时后遇到了问题。 该作业在workers中进行了扩展,但随后开始加载具有以下内容的日志 Processing lull for PT7500.005S in state process of ... 记录此代码的转换正好在“GROUPBY”块之后,并执行对外部服务的异步HTTP调用(使用scala.concurrent.{Await/Promise}) 你知道为什么会这样吗?与异步、扩展或分组策略相关 工作ID:2018-0

通过使用会话窗口与相当高级的组一起运行流数据流管道,我在运行了几个小时后遇到了问题。 该作业在workers中进行了扩展,但随后开始加载具有以下内容的日志

Processing lull for PT7500.005S in state process of ...
记录此代码的转换正好在“GROUPBY”块之后,并执行对外部服务的异步HTTP调用(使用
scala.concurrent.{Await/Promise}

你知道为什么会这样吗?与异步、扩展或分组策略相关

  • 工作ID:2018-01-29_03_13_40-12789475517328084866
  • SDK:用于Java 2.2.0的Apache Beam SDK
  • Scio版本:0.4.7
    • @jkff为我指明了正确的方向。
      第一步是为scala的未来添加一个超时时间——这向我表明,“处理停顿”实际上是承诺,从未终止,因此迫使数据流“永远”保持它们。现在我得到了正确的未来超时错误,但没有用,因为作业仍然没有继续进行。现在改为同步调用,但我发现吞吐量要低得多

      这可能与异步调用HTTP服务有关。我也遇到过类似的问题。作为测试,您可以尝试同步调用服务。您将无法获得接近的高吞吐量,但您可能能够确定问题是否与异步调用有关。可能是您正在通过HTTP与服务器进行通信,导致服务器过载吗?@Andrew:我一定会尝试一下,我之所以使用async,首先是为了获得更好的吞吐量,并且能够对http服务器错误使用重试逻辑。你有什么好的替代品吗?@Pablo:嗯,吞吐量相当高,但这应该不是问题,因为我所说的服务是自动扩展到无限大甚至更大。但是,如果我超载了服务,beam为什么会这样做?@Brodin,我尝试过的一件事是配置
      ExecutionContextExecutorService
      使用的线程数。这允许我控制对服务的并发请求数。如果服务过载,我可以减少线程数量。不幸的是,对服务的异步调用没有很好的替代品。另一种方法是将服务逻辑包含为转换(即直接调用数据库)。我还尝试在Node.js中实现数据流作业,它是为异步功能而构建的。