Google cloud dataflow 是否有数据流源ack API?

Google cloud dataflow 是否有数据流源ack API?,google-cloud-dataflow,Google Cloud Dataflow,据了解,数据流的发布/订阅源在消息可靠持久化之前不会确认消息。有没有可能手动控制这个?我们在ParDo中保留行是一种副作用,因为目前没有无限定制接收器支持,我们有没有办法将ParDo标记为“在捆绑处理这些记录时”呢 或者,我们是否可以在ParDo中作为副作用持续存在,如果它失败,则抛出异常,然后在管道中的ParDo之后使用某种类似BigQuery的“虚拟”流接收器来确保消息得到确认?作为“正常、预期行为”的一部分抛出异常会导致新问题吗 这里的答案真的是“等待无限定制接收器支持”吗?我相信数据流会

据了解,数据流的发布/订阅源在消息可靠持久化之前不会确认消息。有没有可能手动控制这个?我们在ParDo中保留行是一种副作用,因为目前没有无限定制接收器支持,我们有没有办法将ParDo标记为“在捆绑处理这些记录时”呢

或者,我们是否可以在ParDo中作为副作用持续存在,如果它失败,则抛出异常,然后在管道中的ParDo之后使用某种类似BigQuery的“虚拟”流接收器来确保消息得到确认?作为“正常、预期行为”的一部分抛出异常会导致新问题吗


这里的答案真的是“等待无限定制接收器支持”吗?

我相信数据流会自动提供您想要的行为。在使用您的
ParDo
完成处理并保留结果之前,我们不会确认PubSub消息。

对。但如果我们将结果作为pardo的副作用进行持久化,因为目前不支持自定义无边界接收器?您是否正在运行管道而没有看到ACK?据我所知,我们应该在数据流管道中持久化后立即进行确认,这与您的代码正在执行的操作无关。此外,即使ack依赖于持久化,那么一旦ParDo完成了对输入的处理,它也将被ack。请注意,您的ParDo需要容忍由于重试(例如,异常等)而导致的重复。这篇文章让我相信,消息在由接收器发出或由groupby持久化之前不会被确认。在没有groupby和水槽的管道中,我认为这意味着他们永远不会被确认,我错了吗?一旦它们所在的包完成,它们就会被确认——因此,即使它们被过滤掉并且没有被写入,它们仍然会在提交包时被确认。实际上,这意味着在它们被用作GroupByKey的输入、由接收器发出或由管道中的最后一个ParDo处理之后(类似于将它们写入/dev/null)。基本上,只要元素通过第一个融合步骤进行处理(有关融合步骤的详细信息,请参阅)。您描述的行为将导致抛出异常的捆绑包重试。在流式处理中,将永远重试这些捆绑包。在批处理管道中,它最终会使作业失败。根据您的需要,您可能希望继续,或者将其写入其他位置(a)。