Gau*_*mar 3 apache-flink flink-streaming
在 Flink 中,有两件事提供了类似的行为。两者有什么区别。
当您已经可以通过 maxOutOfOrderness 实现相同的行为时,为什么还要使用 AllowedLateness。
如果您只使用 Allowedlateness,则没有必要等待,因为后期元素将无序,因此将被删除。
如果你只使用 MaxOutOfOrderness,那么它会延迟窗口计算,但它可以处理乱序事件。
MaxOutOfOrderness确定流的水印落后于迄今为止观察到的最大时间戳多远——这反过来又确定了任何事件时间计时器将触发的时间。这些计时器可能属于窗口或进程函数。
水印还定义了哪些事件是迟到的——时间戳小于当前水印的事件是迟到的。
窗口 API 有一个概念 允许延迟,它决定了窗口状态保留多长时间。当水印通过窗口的终点时,将触发事件时间窗口——并且在允许延迟的情况下,窗口将在每个延迟事件到达时再次触发,直到允许的延迟到期(这种触发行为可以定制——这是默认设置)。一旦允许的延迟到期,窗口的状态将被清除,此后延迟事件要么被丢弃,要么被发送到侧输出(如果配置了)。
所以,总结一下:
AllowedLateness 仅适用于事件时间窗口,而 MaxOutOfOrderness 适用于水印的所有使用(例如,进程函数)。
拥有这两种机制很有用,因为您可以让窗口在水印定义的自然窗口结束时触发,并在延迟事件到达时再次更新结果。
水印的目的是控制延迟和完整性之间的权衡。能够要求以低延迟(即相对较短的 MaxOutOfOrderness)生成结果,同时适应相当晚的事件是很有用的。
并纠正一件事:如果 MaxOutOfOrderness 为零并且有 AllowedLateness,那么您可能会有很多延迟事件(除非一切正常),但如果它们的延迟超过允许的时间,它们只会被丢弃(通过一个窗口)迟到。
| 归档时间: |
|
| 查看次数: |
532 次 |
| 最近记录: |