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 读取步骤以及之后的任何 ParDo
s,它们将一起执行(并提交)。
在PubSub
读取之后添加GroupByKey
允许在将捆绑包提交到GroupByKey
后立即将消息确认到PubSub
。
【讨论】:
对此答案的跟进,PubSubIO
如何监控Read
之后的步骤并确定何时触发extendAcknowledgeDeadline
请求?以上是关于Dataflow 何时确认来自 PubSubIO 的批处理项目消息?的主要内容,如果未能解决你的问题,请参考以下文章
使用 DataflowRunner 和 Dataflow 服务运行时,PubsubIO 不会将自定义时间戳属性输出为 context.timestamp
PubsubIO , msg 超过最大大小,如何执行错误处理
如何在 BigQuery 插入错误时崩溃/停止 DataFlow Pub/Sub 摄取
Dataflow/Apache Beam 在啥阶段确认发布/订阅消息?