gpt4 book ai didi

java - 使用 DataFlow 从多个 PubSub 主题流式传输到 BigQuery 时,消息陷入 GBP 状态?

转载 作者:行者123 更新时间:2023-11-30 02:03:38 25 4
gpt4 key购买 nike

我有一个包含以下部分的 Java DataFlow 管道:

  • PubSub 订阅者阅读多个主题
  • Flatten.pCollections 操作
  • 从 PubsubMessage 转换为 TableRow
  • BigQuery 编写器将所有内容写入动态表

当要连接的订阅列表中有多个 PubSub 主题时,所有元素都会陷入 BigQuery 编写器内 Reshuffle 操作中的 GroupByKey 操作中。在发送几十条测试消息后,我让它运行了几个小时,但没有任何内容写入 BigQuery。

我发现了以下三种解决方法(每个方法都与其他方法分开工作)

  • 在 Pubsub 订阅上添加“withTimestampAttribute”调用。属性的名称根本不重要 - 它可以是传入消息中任何现有或不存在的属性
  • 将 PubSub 订阅数量减少至 1
  • 删除中间的 Flatten.pCollections 操作,创建多个独立的管道来执行完全相同的操作

这些消息不是有意添加时间戳的 - 仅使用 PubsubMessage 时间戳将它们写入 BigQuery 是完全可以接受的。

这也让我感到困惑,即使添加不存在的时间戳属性似乎也可以解决问题。我调试了这个问题以打印出管道内的时间戳,并且它们在两种情况下都是可比较的;当指定不存在的时间戳属性时,它似乎无论如何都会回退到 pubsub 时间戳。

什么可能导致此问题?我该如何解决?对我来说,最可接受的解决方法是删除 Flatten.pCollections 操作,因为它不会严格使代码复杂化,但我无法理解它失败的原因。

最佳答案

您是否对管道应用了窗口? Beam documentation警告您在没有任何窗口或触发的情况下使用无限制的 PCollection(如 Pub/Sub):

If you don’t set a non-global windowing function or a non-default trigger for your unbounded PCollection and subsequently use a grouping transform such as GroupByKey or Combine, your pipeline will generate an error upon construction and your job will fail.

在您的情况下,管道在构造时不会失败,但消息被困在 GroupByKey 中,因为它正在等待窗口结束。尝试在 BigQuery 编写器之前添加一个窗口,看看是否可以解决问题。

关于java - 使用 DataFlow 从多个 PubSub 主题流式传输到 BigQuery 时,消息陷入 GBP 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51984388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com