Dataflow 何时确认来自 PubSubIO 的批处理项目消息?

Posted

技术标签:

【中文标题】Dataflow 何时确认来自 PubSubIO 的批处理项目消息?【英文标题】:When does Dataflow acknowledge a message of batched items from PubSubIO? 【发布时间】:2017-06-03 06:50:48 【问题描述】:

有一个question on this topic,答案是“一旦消息持久保存在数据流管道中的某个地方,就会做出确认。”。

从概念上讲,这是有道理的,但我不确定 Dataflow 如何能够在消息被反序列化并在管道中转换之后,在其有效负载被持久化之前对其进行跟踪。

在我们的例子中,PubSub 消息包含一批项目。在收到消息并反序列化后,我们将批处理进行分解。最终,批处理中的某个项目可能会被丢弃或提交到 Datastore,具体取决于其时间戳

确认在这种情况下如何工作?

【问题讨论】:

【参考方案1】:

Dataflow 以包的形式执行您的代码。成功执行后,每个包都会被提交,以避免在成功处理的元素上重新执行。捆绑包不一定在管道中的每个步骤之间提交。有关何时实现和提交 PCollection 的详细信息,请参阅the description of fusion optimization。

对于 PubSub,作为包的一部分读取的消息将被确认为提交完成该包的一部分。这意味着,如果您查看 PubSub 读取步骤以及之后的任何 ParDos,它们将一起执行(并提交)。

PubSub 读取之后添加GroupByKey 允许在将捆绑包提交到GroupByKey 后立即将消息确认到PubSub

【讨论】:

对此答案的跟进,PubSubIO 如何监控Read 之后的步骤并确定何时触发extendAcknowledgeDeadline 请求?

以上是关于Dataflow 何时确认来自 PubSubIO 的批处理项目消息?的主要内容,如果未能解决你的问题,请参考以下文章

使用 DataflowRunner 和 Dataflow 服务运行时,PubsubIO 不会将自定义时间戳属性输出为 context.timestamp

PubsubIO , msg 超过最大大小,如何执行错误处理

如何在 BigQuery 插入错误时崩溃/停止 DataFlow Pub/Sub 摄取

Dataflow/Apache Beam 在啥阶段确认发布/订阅消息?

来自 Dataflow 的 BigQuery 流式插入 - 没有结果

Dataflow 是不是应该使用来自 Pub/Sub 主题或订阅的事件? [复制]