Google cloud dataflow 如何使用DataFlow和Cloud Pub Sub确保幂等性?

Google cloud dataflow 如何使用DataFlow和Cloud Pub Sub确保幂等性?,google-cloud-dataflow,google-cloud-pubsub,Google Cloud Dataflow,Google Cloud Pubsub,我很好奇在使用云数据流和PubSub时,确保幂等性的最佳方法是什么 我们目前有一个系统,可以在MySQL数据库中处理和存储记录。我对在我们的一些报告中使用数据流很好奇,但我想了解我需要做些什么来确保我不会意外地重复计算(或超过重复计算)相同的消息 我的困惑分为两部分,第一部分是确保我只发送一次消息,第二部分是确保我只处理一次消息 我的直觉如下: 每当我感兴趣的事件记录在MySQL数据库中时,将其转换为PubSub消息并发布到PubSub。 假设成功,记录与MySQL记录一起返回的PubSub i

我很好奇在使用云数据流和PubSub时,确保幂等性的最佳方法是什么

我们目前有一个系统,可以在MySQL数据库中处理和存储记录。我对在我们的一些报告中使用数据流很好奇,但我想了解我需要做些什么来确保我不会意外地重复计算(或超过重复计算)相同的消息

我的困惑分为两部分,第一部分是确保我只发送一次消息,第二部分是确保我只处理一次消息

我的直觉如下:

每当我感兴趣的事件记录在MySQL数据库中时,将其转换为PubSub消息并发布到PubSub。 假设成功,记录与MySQL记录一起返回的PubSub id。这样,如果它有一个PubSub id,我知道我已经发送了它,不需要再次发送。如果发布到PubSub失败,那么我知道我需要再次发送它。一切都好

但是,如果在PubSub写入成功后,对MySQL的写入失败,我可能会再次将同一消息发布到PubSub,因此我需要在数据流方面做一些事情来处理这种情况以及PubSub两次发送消息的情况(按照)


最好的处理方法是什么?在AppEngine或其他系统中,我会对数据存储进行检查,以查看我正在创建的新记录是否存在,但我不确定如何使用数据流来实现这一点。有没有一种方法可以很容易地实现一个过滤器来阻止消息被处理两次?或者数据流已经处理了吗?

数据流可以根据接收方的任意消息(由
idLabel
选择)消除重复消息,如中所述。从生产者的角度来看,您需要确保您是基于MySQL记录确定地、唯一地填充属性的。如果操作正确,数据流将只处理每个逻辑记录一次