Global Window allowedLateness

时间:2017-05-11 17:40:17

标签: google-cloud-dataflow

在游戏管道示例中,有一个全局/ infite窗口的示例,其中定义了允许的延迟。

public PCollection<KV<String, Integer>> apply(PCollection<GameActionInfo> input) {
    return input.apply("LeaderboardUserGlobalWindow",
        Window.<GameActionInfo>into(new GlobalWindows())
            // Get periodic results every ten minutes.
            .triggering(Repeatedly.forever(AfterProcessingTime.pastFirstElementInPane()
                .plusDelayOf(TEN_MINUTES)))
            .accumulatingFiredPanes()
            **.withAllowedLateness(allowedLateness)**)
        // Extract and sum username/score pairs from the event data.
        .apply("ExtractUserScore", new ExtractAndSumScore("user"));
  }

让我们说允许的延迟时间设置为36h。

这是否意味着每10分钟触发一次窗口,而不是包含从开头到那些分钟的所有数据,如果有任何后期数据到达,那么每个窗口都会被重新触发?

E.g。

在30分钟的处理时间之后会有窗口:

A(10min)
B(20min)
C(30min)

如果在处理时间的第35分钟,消息(X)到达且事件时间戳为5分钟,我将得到以下输出

old: A(10min)
old: B(20min)
old: C(30min)
new: A1(35min, equals all elements in A+X)

我的理解是否正确?

1 个答案:

答案 0 :(得分:0)

是。你的理解是正确的。

此外,任何晚于36小时的数据都将被丢弃。