关于这个主题存在一个问题,答案是"一旦消息在Dataflow管道中的某个地方持久存在,就会得到确认."
从概念上讲,这是有道理的,但我不确定Dataflow如何能够在消息被持久化之前在管道中进行反序列化和转换后跟踪消息.
在我们的示例中,PubSub消息包含一批项目.收到并反序列化消息后,我们分解了批处理以进行处理.最终,批处理中的项目可能会被丢弃或提交到数据存储区,具体取决于其时间戳.
在这种情况下,确认如何工作?
Dataflow以捆绑形式执行您的代码.成功执行后,每个bundle都致力于避免在成功处理的元素上重新执行.捆绑包不一定在管道中的每个步骤之间提交.有关何时实现PCollections和提交PCollections的详细信息,请参阅融合优化的说明.
对于PubSub,作为bundle的一部分读取的消息将被确认为提交该bundle的完成的一部分.这意味着如果您查看PubSub读取步骤以及ParDo
它之后的任何步骤,它们将一起执行(并提交).
GroupByKey
在PubSub
读取之后添加a 允许PubSub
在捆绑包被提交到的时候立即确认消息GroupByKey
.