缩放具有阻塞网络调用的 ParDo 转换

Scaling of ParDo transforms having blocking network calls

我有一个 ParDo 转换,我在其中进行阻塞 Web 服务调用以获取一些数据。通话需要一段时间才能到达 return(比如大约 1 分钟)。我观察到即使在相当大的 PCollection 上调用,此 ParDo 转换也不会扩展很多(我使用的是自动缩放模式)。也许这是因为缩放仅在 CPU/memory 利用率高时发生,在我的例子中,CPU/memory 消耗可能很低,因为大部分时间都花在等待对 return 的网络调用上。最终结果是,由于没有发生缩放,只有少量的 http 请求是并行发出的,并且作业需要更长的时间才能完成。 ideas/suggestions 我可以如何改善这种情况?

谢谢

注意:我正在通过 Java SDK 1.9.1 使用 Google Dataflow,并且愿意迁移到 Apache Beam Java SDK

实际上,目前 Dataflow 会限制自动缩放,以防工作人员未充分利用 CPU。

这主要是为了避免您在管道中阻塞网络调用的情况,随着我们扩大规模,正在进行更多调用并且外部服务过载并变得更慢,结果数据流认为要完成的工作总量更大,并进一步扩大规模,进入正反馈循环。当前的行为对于这种情况也不是最佳的,但它至少没有这种灾难性的故障模式。

我们正在考虑采用不同的方法来实现两全其美,但目前这是一个已知问题,要解决此问题,您需要明确指定工作人员的数量(从而禁用自动缩放),或者也许添加一些燃烧 CPU 的代码(这是理所当然的,非常丑陋)。

如果这是一个流作业,增加阻塞 ParDo 并行度的标准做法是在它之前添加一个 Reshuffle。参见 在大多数情况下,增加工作人员数量不会在流式管道中显着增加 parallelism/throughput。