Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud dataflow 有边界集合的Google云数据流是否在批处理模式下移动水印?_Google Cloud Dataflow_Apache Beam - Fatal编程技术网

Google cloud dataflow 有边界集合的Google云数据流是否在批处理模式下移动水印?

Google cloud dataflow 有边界集合的Google云数据流是否在批处理模式下移动水印?,google-cloud-dataflow,apache-beam,Google Cloud Dataflow,Apache Beam,我有一个管道,它从一个有界集合中的数据库中读取数据。集合的每个元素都有一个时间戳,分配给ProcessContext.outputWithTimestamp。使用可拆分的DoFn读取数据,其中在ProcessContext的末尾调用了ProcessElement。总的来说,DoFn使用大约100个拆分,因此它不是一个单独的拆分 稍后在管道中,定义了以下固定窗口: Window.<Map.Entry<Key, Long>>into( FixedWindows.of(

我有一个管道,它从一个有界集合中的数据库中读取数据。集合的每个元素都有一个时间戳,分配给
ProcessContext.outputWithTimestamp
。使用可拆分的DoFn读取数据,其中在
ProcessContext的末尾调用了
ProcessElement
。总的来说,DoFn使用大约100个拆分,因此它不是一个单独的拆分

稍后在管道中,定义了以下固定窗口:

Window.<Map.Entry<Key, Long>>into(
    FixedWindows.of(Duration.standardSeconds(10)))
        .withAllowedLateness(Duration.ZERO)
        .triggering(AfterWatermark.pastEndOfWindow()
            .withEarlyFirings(AfterPane.elementCountAtLeast(10))))
        .discardingFiredPanes()
Window.into(
固定窗口(持续时间标准秒(10)))
.允许延迟(持续时间为零)
.triggering(AfterWatermark.pastEndOfWindow()后)
.具有早期点火(后窗格。元素计数至少(10)))
.丢弃Firedpanes()
在窗口之后,集合按键组合:
Sum.longsPerKey()

问题在于,在完全读取集合之前,集合的元素永远不会通过组合器。这是数据流在批处理模式下的预期行为吗?我的猜测是,数据流根本不会计算/移动水印,这是否接近事实


我的问题与非常类似,但在我的例子中,集合是由可拆分DoFn读取的,其中
ProcessContext.updateWatermark
在每个元素的末尾被调用。

是的,这是批处理模式管道的预期行为,无论使用的是可拆分DoFn

通常,所有元素一次(总共)通过每个步骤。一个窗口的结果可能比其他窗口的结果先得到处理,但这更多地与容量和分布式执行有关

最后,GroupByKey,或者在您的示例中是Sum By Key,强制执行一个洗牌操作,这要求在实际执行SBK转换之前准备好所有数据


我想说您是对的,在这种情况下不会跟踪水印。

是的,这是批处理模式管道的预期行为,无论使用可拆分的DoFn

通常,所有元素一次(总共)通过每个步骤。一个窗口的结果可能比其他窗口的结果先得到处理,但这更多地与容量和分布式执行有关

最后,GroupByKey,或者在您的示例中是Sum By Key,强制执行一个洗牌操作,这要求在实际执行SBK转换之前准备好所有数据


我想说你是对的,在这种情况下,水印没有被跟踪。

在批处理管道中,你可以想到水印一次从最小值移动到最大值。所以所有的窗户逻辑上都会同时着火。正如Chu mike提到的,在批处理中,每个阶段在其下游阶段运行之前完全执行。但是这些元素应该通过组合器(假设您在“映射器”上提到组合器优化)。

在批处理管道中,您可以想到水印一次从最小值移动到最大值。所以所有的窗户逻辑上都会同时着火。正如Chu mike提到的,在批处理中,每个阶段在其下游阶段运行之前完全执行。但是这些元素应该通过组合器(假设您在“映射器”上提到组合器优化)。

谢谢!我还发现了这一澄清。它说“在批处理模式下,当前水印进度从时间开始跳到输入完全消耗后的时间结束”。谢谢!我还发现了这一澄清。它表示“在批处理模式下,当前水印进度从时间开始跳到输入完全消耗后的时间结束”。