提问者:小点点

数据流如何在升级流作业期间管理当前进程?


当部署启用自动缩放的数据流流作业时,它使用单个worker。让我们假设管道读取pubsub消息,执行一些DoFn操作并上传到BQ。我们还假设PubSub队列已经有点大。因此管道开始并在单个worker上加载一些处理它们的pubsub。几分钟后,它意识到需要一些额外的worker并创建它们。许多pubsub消息已经加载并正在处理,但尚未被处理。这是我的问题:dataflow将如何管理那些尚未被处理的,正在处理的元素?

我的观察表明,数据流将许多已经被处理的消息发送给新创建的工作人员,我们可以看到两个工作人员同时处理相同的元素。这是预期的行为吗?

另一个问题是——接下来是什么?第一个胜利?还是新的胜利?我的意思是,我们有相同的pubsub消息,它仍在第一个worker和新的上处理。如果第一个worker上的进程更快并完成处理怎么办?它将被确认并下游或被丢弃,因为此元素的新进程已启动,并且只能最终确定新的进程?


共1个答案

匿名用户

数据流为每条记录提供精确一次的处理。有趣的是,这并不意味着用户代码每条记录只运行一次,无论是流式运行还是批处理运行。

它可能会通过用户转换多次运行给定的记录,或者它甚至可能在多个工作人员上同时运行相同的记录;这对于保证在工作人员失败时至少处理一次是必要的。只有其中一次调用可以“获胜”并在管道下游产生输出。

更多信息在这里-https://cloud.google.com/blog/products/data-analytics/after-lambda-exactly-once-processing-in-google-cloud-dataflow-part-1