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

问题描述

我有3个不同的Pubsubs(源)和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

是否有一种方法可以使管道使用单个Dataflow,它可以从多个源读取数据并将它们写入多个相应的接收器?基本上,来自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,它解释了如何从多个Pubsubs中读取数据流,但是我不确定如何实现多个接收器写入功能(动态输出路径?)。有可能吗?

解决方法

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

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

您重用了转换,但是源和接收器是特定的。您的数据流图将向您显示

pubsub_topic_abc ---> transformation ---> gcs_bucket_abc

pubsub_topic_def ---> transformation ---> gcs_bucket_def

pubsub_topic_ghi ---> transformation ---> gcs_bucket_ghi

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