繁体   English   中英

使用DataFlow从多个PubSub主题流到BigQuery时,邮件卡在GBP中吗?

[英]Messages stuck in GBP when streaming from multiple PubSub topics to BigQuery using DataFlow?

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

  • PubSub订户阅读的几个主题
  • Flatten.pCollections操作
  • 从PubsubMessage转换为TableRow
  • BigQuery writer将所有内容写入动态表

如果要连接的订阅列表中有多个PubSub-topic,则所有元素都将卡在BigQuery编写器的Reshuffle操作中的GroupByKey操作中。 发送几十条测试消息后,我已经让它运行了几个小时,但是BigQuery没有写任何东西。

我发现了以下三个变通方法(每个变通方法都与其他变通方法分开)

  • 在Pubsub订阅上添加一个“ withTimestampAttribute”调用。 属性的名称完全无关紧要-它可以是传入消息上的任何现有或不存在的属性
  • 将PubSub订阅数减少到仅1
  • 删除两者之间的Flatten.pCollections操作,创建执行相同操作的多个单独管道

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

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

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

您是否将加窗应用于管道? Beam文档警告您使用无边界的PCollection(例如Pub / Sub),而不会出现任何窗口或触发事件:

如果您没有为无边界的PCollection设置非全局窗口函数或非默认触发器,然后使用分组转换(例如GroupByKey或Combine),则管道将在构造时生成错误,并且您的工作将失败。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM