【问题标题】:How to implement Flow control settings in PubSubIO in dataflow pipeline如何在数据流管道的 PubSubIO 中实现流控制设置
【发布时间】:2020-03-25 13:50:45
【问题描述】:

在我们的应用程序中,我们在数据流管道中使用 PubsubIO 从 PubSub 读取数据。下面是代码。

  PCollection<String> pubsubMsg = pipeline
                .apply(PubsubIO.readStrings().fromSubscription(options.getInputSubscription1()))
    PCollection<String> groupByBigqueryResult = pubsubMsg.apply("Read from bigquery table",
            ParDo.of(new ReadRawdataFromBiqueryTable()));           

但是当我们在这个管道中附加 BigQuery 读取时,由于 BigQuery 读取速度很慢,因为我们在 ParDo 中这样做,似乎在 PubSub 订阅者中实现了一些默认流控制设置,因此我可以看到 PubSub 消息流率为非常慢,但是如果我注释掉在 ReadRawdataFromBiqueryTable 中完成的 BigQuery 读取实现,那么它很快。如何覆盖流控制设置。附加两个数据流作业 1.with bigquery read 2。注释掉 bigquery 读取部分

【问题讨论】:

    标签: google-cloud-platform google-bigquery google-cloud-dataflow apache-beam google-cloud-pubsub


    【解决方案1】:

    我怀疑这里发生的情况是由于ParDo 速度慢,而不是来自 Dataflow 或PubSubIO 的显式流控制,管道速度很慢。数据流(和一般的 Beam)在管道中读取数据,每个数据元素都通过该管道传递(有时是缓冲的)。因此,在这种情况下,PubSubIO 不会在下一步立即读取数据(从 BigQuery 读取的ParDo 很慢)。我建议阅读以下内容以了解有关 Beam 编程模型的更多信息。

    https://beam.apache.org/documentation/programming-guide/

    加快速度的一种方法可能是尝试通过缓冲多个元素来减少从 BigQuery 读取的数据量,并以某种方式尝试减少发送到 BigQuery 的请求数量(或以其他方式重组管道)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      相关资源
      最近更新 更多