Google cloud dataflow 如何确定在Google数据流流管道中提供多少资源?

Google cloud dataflow 如何确定在Google数据流流管道中提供多少资源?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我很好奇如何决定如何为运行在谷歌数据流平台上的ApacheBeam管道提供资源。我构建了一个流式管道(Beam Java 2.0.0),它接受一个PubSub JSON字符串,将其转换为一个BQ TableRow,然后将其路由到正确的表。管道中还有两个转换,一个是每分钟5分钟的滑动窗口,另一个是固定时间为1分钟的窗口 对于某些上下文,每个传入消息大约是一个1KB的JSON字符串,在极端峰值时,管道将在一秒钟内接收250000条消息。我的滑动时间窗口可能会在关闭前增加到500000000行/分钟(

我很好奇如何决定如何为运行在谷歌数据流平台上的ApacheBeam管道提供资源。我构建了一个流式管道(Beam Java 2.0.0),它接受一个PubSub JSON字符串,将其转换为一个BQ TableRow,然后将其路由到正确的表。管道中还有两个转换,一个是每分钟5分钟的滑动窗口,另一个是固定时间为1分钟的窗口

对于某些上下文,每个传入消息大约是一个1KB的JSON字符串,在极端峰值时,管道将在一秒钟内接收250000条消息。我的滑动时间窗口可能会在关闭前增加到500000000行/分钟(最坏的情况,但这正是我们计划的)。我们的典型峰值流量使用率约为每秒75k条消息。然而,90%的时间我们的管道每秒只处理30条消息

我们在启用自动缩放的数据流上运行,默认情况下,Google为流式管道提供4个CPU、15GB和420gb*最大工作人数。设置了最多10名工作人员,我们将支付每月4.2TB的磁盘使用费。这似乎有点过分,但我不知道我应该看什么数据来验证我的理论

我一直在考虑的是使用2个CPU和7.5 GB内存,每个工作进程使用20 GB SSD,并将最大工作进程数设置为50。在这种配置下,我们至少有4名工人

我的演讲摘要:
-如何确定流媒体管道所需的CPU、RAM和磁盘空间?
-如何确定管道应提供SSD资源而不是标准硬盘驱动器?

-我可以查看哪些度量标准来衡量管道的性能?

由于管道非常不同,所以没有通用的方法来确定要使用多少工人和什么大小的磁盘。不过,有几种方法可以很好地发挥作用:

  • 数据流的水平扩展非常接近线性。这意味着 如果您运行一个采样管道(例如,对输入的10%进行采样 流量)您可以非常快速地估计全部资源 管道将需要,无需支付过高的费用。您可以判断管道是否“跟上”输入,系统延迟是否保持较低,数据水印是否继续前进。然后,您可以估计 使用此策略,管道在峰值输入速率下需要的最大工作人员数。让我们拨打这个号码
    m
  • 完成上述操作后,您可以依靠将
    maxNumWorkers
    标志设置为一个数字
    k*m
    ,其中
    k
    将有效地确定管道在峰值负载下从积压中追赶的速度。例如,在
    k=1
    时,管道只能跟上峰值负载,因此峰值负载下的积压可能永远不会耗尽,或者等待非峰值负载耗尽。在
    k=2时
    管道可以处理2倍的峰值负载,因此它将更快地赶上。当然,这是一种权衡,即您愿意在积压工作期间支付多少资源,以及您愿意容忍多少追赶延迟
  • 自动缩放还将确保管道在非高峰负载期间缩减规模,这样您就不会在非高峰时间为所有资源付费
  • 其他一些注意事项:

    • 流式数据流在使用4个CPU工作者时往往比使用2个CPU工作者时表现更好。这是因为存在一些每个工作线程的开销,并且针对工作并行性进行了某些调优,优化为4个CPU工作线程
    • 在使用数据流时,默认情况下应该已经启用SSD使用,因为SSD可以显著提高写入吞吐量并带来更好的性能