我有一个数据流作业,已订阅来自PubSub的消息:
p.apply("pubsub-topic-read", PubsubIO.readMessagesWithAttributes()
.fromSubscription(options.getPubSubSubscriptionName()).withIdAttribute("uuid"))
我在文档中看到不能保证没有重复,并且Beam建议使用withIdAttribute
。
这非常有效,直到我耗尽现有工作,等待它完成并重新启动另一个工作,然后我看到数百万的BigQuery记录重复(我的工作将PubSub消息写入BigQuery)。
知道我在做什么错吗?
答案 0 :(得分:3)
我认为您应该使用update feature而不是使用流失来停止管道并开始新的管道。在后一种方法中,状态不在两个管道之间共享,因此Dataflow无法识别已经从PubSub传递的消息。使用更新功能,您应该能够继续执行管道,而不会出现重复消息。