清空DataFlow作业并随后开始另一个作业,导致消息重复

时间:2019-04-04 20:31:09

标签: google-cloud-dataflow google-cloud-pubsub

我有一个数据流作业,已订阅来自PubSub的消息:

p.apply("pubsub-topic-read", PubsubIO.readMessagesWithAttributes()


.fromSubscription(options.getPubSubSubscriptionName()).withIdAttribute("uuid"))

我在文档中看到不能保证没有重复,并且Beam建议使用withIdAttribute

这非常有效,直到我耗尽现有工作,等待它完成并重新启动另一个工作,然后我看到数百万的BigQuery记录重复(我的工作将PubSub消息写入BigQuery)。

知道我在做什么错吗?

1 个答案:

答案 0 :(得分:3)

我认为您应该使用update feature而不是使用流失来停止管道并开始新的管道。在后一种方法中,状态不在两个管道之间共享,因此Dataflow无法识别已经从PubSub传递的消息。使用更新功能,您应该能够继续执行管道,而不会出现重复消息。