Google Cloud DataFlow:将多个管道同步/合并为一个

Google Cloud DataFlow: Synchronize/ merge multiple pipeline into one

我有两个 Google Pub/Sub 主题,我的管道通过 Windowing 从中流出。从技术上讲,我有两个单独的管道用于每个主题,我需要将这两个管道 Windows 合并为一个管道以进行一些聚合,这需要在同一 Window 中组合事件。

假设我们有 Event1 和 Event2。这两个事件有两个单独的主题,即 Topic1 和 Topic2。我有 Pipeline1 和 Pipeline2,它们分别从这些主题中流出。我需要以某种方式访问​​属于同一 Window 的 Event1 和 Event2 并产生一些输出。这可能吗?

您可以像这样在同一管道中读取多个 Pubsub 主题:

Pipeline p = ...;

PCollection<A> collection1 = p.apply(PubsubIO.Read.topic(topic1));
PCollection<B> collection2 = p.apply(PubsubIO.Read.topic(topic2));

现在,您希望如何组合这两者 PCollections 取决于您的应用程序。您可能想要阅读 Handling Multiple PCollections。以下是三种可能性的快速提及:

  1. Flatten:如果你只是想在每个window的基础上合并两个集合的内容,这就可以了。

  2. ParDo with side inputs:如果一个集合中的 windows 相当小,那么将其读作 ParDo 对较大集合的边输入可能是合理的.

  3. Joins with CoGroupByKey:您可以在两个集合之间实现多种连接,方法是将它们键入某个公共键并使用 CoGroupByKey.