Google cloud dataflow GCP数据流-吞吐量逐渐降低,工人未充分利用

Google cloud dataflow GCP数据流-吞吐量逐渐降低,工人未充分利用,google-cloud-dataflow,throughput,Google Cloud Dataflow,Throughput,我有一个在GCP数据流中运行的Beam脚本。此数据流执行以下步骤: 读取大量PGP加密的文件。(总大小超过100 GB,单个文件大小为2 GB) 解密文件以形成PCollection 对PCollection执行wait() 在写入输出文件之前,对PCollection中的每条记录进行一些处理 GCP数据流的行为: 当读取输入文件并解密文件时,它从一个worker开始,然后扩展到30个worker。但是,只有一名工人继续被利用,所有其他工人的利用率低于10% 最初,解密时的吞吐量为每秒150K条

我有一个在GCP数据流中运行的Beam脚本。此数据流执行以下步骤:

  • 读取大量PGP加密的文件。(总大小超过100 GB,单个文件大小为2 GB)
  • 解密文件以形成PCollection
  • 对PCollection执行wait()
  • 在写入输出文件之前,对PCollection中的每条记录进行一些处理
  • GCP数据流的行为:

  • 当读取输入文件并解密文件时,它从一个worker开始,然后扩展到30个worker。但是,只有一名工人继续被利用,所有其他工人的利用率低于10%
  • 最初,解密时的吞吐量为每秒150K条记录。因此,90%的解密在1小时内完成,这很好。但是,随后吞吐量逐渐降低,甚至降至每秒100条记录。因此,完成剩余10%的工作量还需要1-2个小时

  • 你知道为什么工人没有得到充分利用吗?如果没有利用率,为什么不缩小规模?在这里,我为大量VM-s支付了不必要的费用:-(.第二,为什么吞吐量最终会减慢降低速度,从而显著增加完成时间?

    有一个问题与云数据流的吞吐量和输入行为有关。我建议您跟踪对工作人员的自动缩放和利用行为所做的改进

    与启用该功能时相比,数据流辅助处理和自动缩放的默认体系结构在某些情况下响应性较差。我建议您尝试在启用流引擎的情况下运行相关的数据流管道,因为它根据管道的CPU利用率提供了更具响应性的自动缩放性能线路


    我希望您能发现上述信息非常有用。

    您是否可以尝试在不等待的情况下实现您的解决方案()

    比如说,, FileIO.match().filepattern()->ParDo(DoFn用于解密文件)->FileIO.readmatches()->ParDo(DoFn用于读取文件)

    参见示例


    这将允许您的管道更好地并行化。

    您的作业可能在“写入到输出”阶段受到限制。一个可能的原因是您无法并行写入。此外,当存在积压时,数据流不会缩小。我们没有等待()最初。但是,数据流尝试在同一个辅助进程中处理所有文件,导致OOM错误。因此,我们添加了wait()为了增加工作进程中的负载,以便自动缩放,您可以尝试上述模式吗?这应该会将工作划分到多个工作进程中。这是真的……我认为,我们做出了错误的决定,选择了一个半熟的产品,如Beam和Dataflow。看起来它有很多性能问题。非常有趣的是,看到10个高内存工作进程节点处理整个进程每秒100条记录,CPU利用率低于1%。