Google cloud dataflow 有没有方法在数据流运行的中间动态设置NUMWER?

Google cloud dataflow 有没有方法在数据流运行的中间动态设置NUMWER?,google-cloud-dataflow,Google Cloud Dataflow,我在工作中使用谷歌数据流。 当我使用数据流时,我需要在数据流批处理作业运行时动态设置工作进程数。 这主要是因为云bigtable QPS。 我们使用的是3个bigtable群集节点,它们无法立即接收来自500个工作者的所有流量。 因此,在尝试将所有处理过的数据插入bigtable之前,我必须将Worker数(从500更改为25)。 是否有任何方法可以实现此目标?数据流不提供在批处理作业运行时手动更改其资源分配的功能,但是: 1) 我们计划将节流合并到我们的数据库中,以便数据流在写入bigtabl

我在工作中使用谷歌数据流。
当我使用数据流时,我需要在数据流批处理作业运行时动态设置工作进程数。
这主要是因为云bigtable QPS。 我们使用的是3个bigtable群集节点,它们无法立即接收来自500个工作者的所有流量。
因此,在尝试将所有处理过的数据插入bigtable之前,我必须将Worker数(从500更改为25)。


是否有任何方法可以实现此目标?

数据流不提供在批处理作业运行时手动更改其资源分配的功能,但是:

1) 我们计划将节流合并到我们的数据库中,以便数据流在写入bigtable时检测到它需要缩小。我没有具体的预计到达时间,但这肯定是我们的路线图

2) 同时,您试图通过以下技巧人为限制管道的并行性:

  • 以您的
    PCollection
    Something
    是您正在写入bigtable的数据类型)
  • 通过一系列转换将其导入:
    ParDo(与0..25中的随机键配对)
    GroupByKey
    ParDo(解组并移除随机键)
    。您再次获得一个
    PCollection
  • 将此集合写入Bigtable
这里的诀窍是,GroupByKey之后的单个键中没有并行化,因此GroupByKey的结果是25个键值对的集合(其中的值是
Iterable
),不能由超过25个工作线程并行处理。ParDo的跟随可能会与写入Bigtable融合在一起,因此并行度为25

需要注意的是,如果数据流预测这将提高管道的性能,那么它有权具体化任何中间集合它甚至可能只是为了提高并行度而这样做(在本例中,这与您的目标背道而驰)。但是如果您有紧急任务要执行,我相信现在这可能会满足您的需要


同时,我能建议的唯一长期解决方案是,在我们进行节流之前,对工人数量使用较小的限制,或使用较大的Bigtable集群,或两者兼而有之。GCP/Next的演讲中有大量相关信息


FWIW,您可以在批处理作业之前增加Bigtable的节点数,给Bigtable几分钟时间进行调整,然后启动作业。完成批处理作业后,您可以关闭Bigtable集群。

非常感谢@jkff!我想我可以采纳你的第二个建议。谢谢你的建议。我也会考虑的。