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