首页 文章

用于处理多个Pubsub主题的数据流管道设计

提问于
浏览
4

我有一个从Pubsub主题读取的管道(按分钟窗口)并将处理结果写入BigQuery . 我想让表格按时间分片,以及数据本身的一些键 . BigQueryIO确实通过窗口时间戳为shard提供了选项,但我认为它不提供任何选项来通过输入集合本身的某些键对表进行分片 . 如果我错过了一些替代方案,请告诉我 .

为了解决这个问题,(选项1)我选择使用相同的密钥对源Pubsub主题本身进行分片,因此,设置管道以从多个源读取并按照单独的分支处理它们并将每个分支结果写入由窗口分区的BigQuery时间戳似乎有效 . 我想知道的是,由于Dataflow中的中间处理步骤在我的情况下可以与源或接收器无关(选项2)如果我继续使用它会使管道更有效(在资源和时间方面)单个Pubsub主题并在BigQuery编写步骤之前添加额外的转换以对集合进行分区,然后写入BigQuery .

选项 - 1在读取/写入期间在Pubsub上发生较小的负载,因为即使组合消息可能适合几百KB - 读取步骤和中间处理在单独的管道中完成(对于Dataflow可能效率不高)

选项 - 2管道更清洁 - 分区的附加步骤也读取与我们分区数量相同的集合次数 - 但是收集项目和分区本身的数量非常小 - 所以,这不应该是更大的问题

我猜选项2在阅读Pipeline Design Principles时更有意义,但我仍然想澄清我在做什么是正确的 .

1 回答

  • 5

    基于您希望输出固定数量的键的假设,选项2似乎是合适的选择 .

    Dataflow

    从PubSub读取,您可以应用任何可能需要将它们提供给 Partition PTransform的变换,该变换将PCollection分成固定数量的输出PCollections . 在上图中,我分别标记了这些A,B和C.

    之后,您可以应用 Values PTransform生成PCollection <FrequentItem <String >>,然后将其提供给 Remove Duplicates PTransform . 这将为您提供我认为您正在寻找的Set语义,因为 Remove Duplicates 单独应用于每个窗口 .

    最后,您将应用任何其他PTransforms将您的PCollection <FrequentItem <String >>转换为PCollection <TableRow>并将其连接到BigQuery接收器 .

相关问题