Google cloud dataflow 使用PubSubIO+;消息保证

Google cloud dataflow 使用PubSubIO+;消息保证,google-cloud-dataflow,Google Cloud Dataflow,我一直在浏览google dataflow的源代码和文档,没有看到任何关于PubSubIO.Read的消息传递语义 我试图理解的问题是:PubSubIO和Google数据流提供了什么样的消息传递语义?根据我对源代码的阅读,在使用ProcessingContext#output方法发出消息之前,消息会得到确认。这意味着数据流作业将丢失已确认且未传递的消息 那么,在作业失败和重新部署的情况下,数据流如何保证(如果有的话)windows(特别是会话)等周围的正确性。数据流不会将消息确认到发布/订阅,直

我一直在浏览google dataflow的源代码和文档,没有看到任何关于
PubSubIO.Read
的消息传递语义

我试图理解的问题是:PubSubIO和Google数据流提供了什么样的消息传递语义?根据我对源代码的阅读,在使用
ProcessingContext#output
方法发出消息之前,消息会得到确认。这意味着数据流作业将丢失已确认且未传递的消息


那么,在作业失败和重新部署的情况下,数据流如何保证(如果有的话)windows(特别是会话)等周围的正确性。

数据流不会将消息确认到发布/订阅,直到消息被持久保存在管道内的中间存储中(或者如果管道内没有GroupByKey,则发送到接收器)。我们还对短时间内从发布/订阅中读取的邮件执行重复数据消除,以防止丢失的确认导致重复传递。因此,数据流保证了一次交付,对发布者在完全不同的时间插入的任何副本进行模化

运行中的管道中缓冲的任何中间状态都会在管道运行时保持。流式管道不会失败——相反,它们会继续重试出错的元素。错误是暂时的,元素最终将被成功处理,或者在出现一致异常(代码中的NullPointerException等)的情况下,您可以使用更正的代码更新作业,该代码将用于处理失败的元素


(请注意,DirectRunner的实现不同,如果查看该部分代码,可能会造成混淆。)

谢谢frances。这很有帮助。我没有意识到(直到我深入到运行程序代码)运行程序基于传递的类进行替换。关于其他信息,当PubSubIO类在GCD服务上运行时,它会被其他实现(protobuf message)替换。当消息被发出零结果的dofn处理时,消息是否也会被确认?如果从同一条消息创建多个结果,那么这些消息是否只有在所有这些消息都被持久化后才被确认?