在游戏管道示例中,有一个全局/ 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)
我的理解是否正确?
答案 0 :(得分:0)
是。你的理解是正确的。
此外,任何晚于36小时的数据都将被丢弃。