我有一个Java DataFlow管道,包括以下部分:
如果要连接的订阅列表中有多个PubSub主题,则所有元素都将卡在BigQuery编写器的Reshuffle操作的GroupByKey操作中。发送几十条测试消息后,我已经让它运行了几个小时,但是BigQuery却没有任何内容。
我发现了以下三种变通办法(每个变通办法都是彼此分开的)
消息不是故意加时间戳的-仅使用PubsubMessage时间戳将它们写入BigQuery是完全可以接受的。
这也使我感到困惑,即使添加不存在的时间戳属性也似乎可以解决该问题。我调试了该问题以打印出管道中的时间戳,并且在两种情况下它们都是可比较的;当指定一个不存在的时间戳属性时,它似乎仍然会退回到pubsub时间戳。
什么可能导致此问题?我该如何解决?对我来说,最可接受的解决方法是删除Flatten.pCollections操作,因为它不会严格使代码复杂化,但是我无法理解它失败的原因。
答案 0 :(得分:2)
您是否将加窗应用于管道? Beam documentation会警告您使用无边界的PCollection(例如Pub / Sub),而不会出现任何窗口或触发事件:
如果您没有为无边界的PCollection设置非全局窗口功能或非默认触发器,然后使用分组转换(例如GroupByKey或Combine),则管道将在构造时生成错误,并且作业将失败
在您的情况下,管道不会在构造上失败,但是消息会停留在GroupByKey中,因为它正在等待窗口结束。尝试在BigQuery编写器之前添加一个窗口,看看是否可以解决问题。