我们可以使用单个 Google Cloud Dataflow 将来自多个 Pubsub(源)的数据写入多个 GCS(接收器)吗?

Posted

技术标签:

【中文标题】我们可以使用单个 Google Cloud Dataflow 将来自多个 Pubsub(源)的数据写入多个 GCS(接收器)吗?【英文标题】:Can we write data from multiple Pubsub (source) to multiple GCS (sink) using a single Google Cloud Dataflow? 【发布时间】:2020-12-27 22:48:15 【问题描述】:

我有 3 个不同的 Pubsub(源)和 3 个相应的 GCS 存储桶(接收器)供他们处理类似的数据。目前,我的 Java 应用程序提供了三个 Cloud Dataflow 资产,它们使用窗口写入将数据从 Pubsubs 写入 GCS 存储桶。

Current pipelines:
pubsub_topic_abc ---> dataflow_abc ---> gcs_bucket_abc

pubsub_topic_def ---> dataflow_def ---> gcs_bucket_def

pubsub_topic_ghi ---> dataflow_ghi ---> gcs_bucket_ghi

有没有一种方法可以让管道使用单个数据流,该数据流可以从多个源读取数据并将它们写入多个相应的接收器?基本上,来自pubsub_topic_abc 的数据应该转到gcs_bucket_abc 等。

Desired pipeline:
pubsub_topic_abc ----                  ---> gcs_bucket_abc
                    |                 |
pubsub_topic_def -------> dataflow -------> gcs_bucket_def
                    |                 |
pubsub_topic_ghi ----                  ---> gcs_bucket_ghi

我找到了这个link,它解释了数据流如何从多个 Pubsub 中读取,但我不确定如何实现多个接收器写入功能(动态输出路径?)。有可能吗?

【问题讨论】:

【参考方案1】:

是的,这是可能的。在您的代码中,执行这样的循环

对于所有源(例如源名称数组) 在此源上创建 Pubsub 阅读器(您将获得 PCollection) 在 PCollection 上应用转换 为转换后的 PCollection 创建专用于 Source 的接收器

您重复使用转换,但源和接收器是特定的。您的数据流图将向您展示这一点

pubsub_topic_abc ---> transformation ---> gcs_bucket_abc

pubsub_topic_def ---> transformation ---> gcs_bucket_def

pubsub_topic_ghi ---> transformation ---> gcs_bucket_ghi

但所有都将在同一个数据流作业中运行。

【讨论】:

以上是关于我们可以使用单个 Google Cloud Dataflow 将来自多个 Pubsub(源)的数据写入多个 GCS(接收器)吗?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以请求从 Google Cloud Storage 到 BigQuery 的多少并发上传?

是否可以将 Google Cloud NAT 用于 TCP/代理 LB 后面的虚拟机,以便所有服务器都可以利用来自单个 IP 的出口?

Google Cloud 上使用 Pub/Sub 的主/从模式

Google Cloud Pub/Sub Python SDK 一次检索单个消息

Google Cloud PubSub 不确认消息

如何使用 Google Cloud TPU 训练 keras 模型