Dataflow 何时确认来自 PubSubIO 的批处理项目消息?
When does Dataflow acknowledge a message of batched items from PubSubIO?
已经有一个,回答说"The acknowledgement will be made once the message is durable persisted somewhere in the Dataflow pipeline."。
从概念上讲,这是有道理的,但我不确定 Dataflow 如何能够在消息被反序列化并在其负载持久化之前在管道中进行转换后跟踪消息。
在我们的例子中,PubSub 消息包含一批项目。收到消息并反序列化后,我们将批次分解进行处理。最终,批次中的项目可能会被丢弃或提交到 Datastore,具体取决于其时间戳。
这种情况下如何确认?
Dataflow 以捆绑方式执行您的代码。成功执行后,每个包都会被提交以避免 re-execution 成功处理的元素。捆绑包不一定在管道中的每个步骤之间提交。有关何时具体化和提交 PCollections 的详细信息,请参阅 the description of fusion optimization。
对于 PubSub,作为捆绑包的一部分读取的消息将被确认为提交完成该捆绑包的一部分。这意味着如果您查看 PubSub 读取步骤及其后的任何 ParDo
s,这些将一起执行(并提交)。
在 PubSub
读取之后添加 GroupByKey
允许消息在包提交到 GroupByKey
后立即确认到 PubSub
。
已经有一个
从概念上讲,这是有道理的,但我不确定 Dataflow 如何能够在消息被反序列化并在其负载持久化之前在管道中进行转换后跟踪消息。
在我们的例子中,PubSub 消息包含一批项目。收到消息并反序列化后,我们将批次分解进行处理。最终,批次中的项目可能会被丢弃或提交到 Datastore,具体取决于其时间戳。
这种情况下如何确认?
Dataflow 以捆绑方式执行您的代码。成功执行后,每个包都会被提交以避免 re-execution 成功处理的元素。捆绑包不一定在管道中的每个步骤之间提交。有关何时具体化和提交 PCollections 的详细信息,请参阅 the description of fusion optimization。
对于 PubSub,作为捆绑包的一部分读取的消息将被确认为提交完成该捆绑包的一部分。这意味着如果您查看 PubSub 读取步骤及其后的任何 ParDo
s,这些将一起执行(并提交)。
在 PubSub
读取之后添加 GroupByKey
允许消息在包提交到 GroupByKey
后立即确认到 PubSub
。