当前位置: 首页 > 知识库问答 >
问题:

有没有办法在GCP中排队批处理数据流作业?

农飞星
2023-03-14

长话短说,我有一个cron工作,每天在指定的时间将一堆文件上传到云存储桶中。所有这些bucket都有一个关联的发布/订阅通知主题,该主题在文件创建事件时触发。每个事件都会触发一个数据流作业来处理该文件。

问题是这会在几秒钟内实例化100个并行批处理作业。每个作业都会使用HTTP请求来关闭我的下游服务。这些服务无法足够快地扩展,并开始抛出连接拒绝错误。

为了限制这些请求,我限制了每个数据流作业的可用工作人员数量。此外,我还增加了下游服务的资源,并将它们的TargetCPUUUUUtilization百分比降低到50%,以给它们时间扩大规模。所有这些都大大减少了错误数量,从4000万个失败请求减少到约50000个。

但是,我在想有没有办法让这些批处理作业排队?只有5到10个作业并行运行将给我的下游服务更多的喘息空间。

FlexRS是我还没有尝试的东西,但我认为它不会有多大帮助,因为该算法优化了成本或速度。这两者都不是问题。

注意:我公司的所有基础设施都是基于GCP的。请随意提出任何其他非基于队列的建议/优化。

共有2个答案

寿卜鹰
2023-03-14

您在体系结构中已经有了一个发布/订阅,您可以创建一个主题并像这样使用它

... 发布/订阅通知主题,该主题在文件创建事件时触发。每个事件向主题作业队列发布一条消息。模板用于从中读取并触发数据流作业来处理该文件,详细信息在上一步的msg send中

如何对Google云发布/子队列进行分级限制

应向晨
2023-03-14

在以前的一家公司,我也有同样的问题。我们通过使用流媒体解决了这个问题:

  • 我们启动了一个监听Pubsub消息的数据流,该消息是在文件进入时由云存储发布的事件
  • 对于每条消息,我们下载了文件并为文件的每一行创建了一个PCollection(因此我们没有使用FileIO库,而是使用标准的文件处理来逐行读取)
  • 根据PCollection中注入的行数,唯一的现有数据流会按比例放大和缩小(有时多达100个workers n1-standard-16!)

可以解决你的问题

 类似资料:
  • 我们使用spring-core和spring-beans 3.2.5、spring-batch-integration 1.2.2、spring-integration-core 3.0.5、spring-integration-file、-http、-sftp、-stream 2.0.3

  • 2)当前以美国为中心的托管是否影响英国等地的性能?例如,如果有人导航到我在伦敦的web应用程序,那么调用GCP云功能的网页是否位于美国,而GCP云功能反过来获取位于伦敦等地的数据?

  • 我正在尝试在GCP数据流中运行批处理作业。工作本身有时会占用大量内存。目前,工作一直在崩溃,因为我相信每个工作人员都在试图同时运行pcollection的多个元素。有没有办法防止每个工人一次运行多个元素?

  • 在,可以访问表单post数据: 是否有可能在一个ApiController中实现相同的功能?

  • GCP数据流状态完成/完成后,是否有任何方式进行后处理。我有一个过程,数据流从GCP存储中批量读取一个文件,并执行一些外部api调用以进行转换,然后写回另一个文件。在所有批次转换/处理后,我需要做一些额外的处理。有办法吗?我正在使用ApacheBeam和模板来运行GCPDatatflow。

  • 例如,如果我有一个Java应用程序一直在运行,并且它在到达时从Kafka队列中读取数据,目的是获取数据并将其转发到数据库...无限循环通过一个批处理作业而不是通过Kafka Streaming/Kafka Connect来完成它有什么大的坏处吗?考虑到我没有在每个循环中无谓地创建或浪费资源,并且我正确地处理了多线程,有没有什么主要的缺点或不这样做的原因?对于长时间运行的应用程序,它是一个可行的选项