我们可以使用单个 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 的主/从模式