问题描述
我有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
但是所有这些都将在同一数据流作业中运行。