Flink:MaxOutOfOrderness 和 AllowedLateness 的区别
Flink: Difference between MaxOutOfOrderness and AllowedLateness
在 Flink 中,有 2 个东西提供了类似的行为。两者有什么区别。
- MaxOutOfOrderness:与 BoundedOutOfOrdernessTimestampExtractor 一起使用。通过将事件时间后面的水印延迟 MaxOutOfOrderness 值,允许流的元素按 maxOutOfOrderness 值的大小乱序。
- AllowedLateness:将 window 状态保持一段时间(由该参数定义)。
当您已经可以通过 maxOutOfOrderness 实现相同的行为时,为什么要使用 AllowedLateness。
如果您只使用 Allowedlateness,则无需等待,因为迟到的元素将乱序,因此将被丢弃。
如果您只使用 MaxOutOfOrderness,那么它会延迟 window 计算,但它可以处理乱序事件。
MaxOutOfOrderness 确定流的水印滞后于迄今为止观察到的最大时间戳的程度——这反过来又决定了任何事件时间计时器何时触发。这些计时器可能属于 windows,或进程函数。
水印还定义了哪些事件是迟到的——时间戳小于当前水印的事件是迟到的。
windowAPI有一个允许迟到的概念,它决定了window状态保留的时间。当水印通过 window 的终点时,事件时间 window 将触发——并且在允许延迟的情况下,window 将在每次延迟时再次触发事件到达,直到允许的迟到期满(此触发行为可以自定义——这是默认设置)。一旦允许的迟到期满,window 的状态就会被清除,此后迟到的事件要么被丢弃,要么被发送到侧面输出(如果配置了一个)。
所以,总结一下:
AllowedLateness 仅适用于事件时间 windows,而 MaxOutOfOrderness 适用于水印的所有使用(例如,流程功能)。
同时拥有这两种机制很有用,因为您可以让 windows 在水印定义的自然 window 结尾触发,并在延迟事件到达时再次触发更新结果。
水印的目的是控制延迟和完整性之间的权衡。能够要求以低延迟(即相对较短的 MaxOutOfOrderness)产生结果,同时适应相当晚的事件是很有用的。
并纠正一件事:如果 MaxOutOfOrderness 为零并且有 AllowedLateness,那么您可能会有很多延迟事件(除非一切都井井有条),但它们只会被删除(由 window) 如果他们的迟到超过允许的迟到。
在 Flink 中,有 2 个东西提供了类似的行为。两者有什么区别。
- MaxOutOfOrderness:与 BoundedOutOfOrdernessTimestampExtractor 一起使用。通过将事件时间后面的水印延迟 MaxOutOfOrderness 值,允许流的元素按 maxOutOfOrderness 值的大小乱序。
- AllowedLateness:将 window 状态保持一段时间(由该参数定义)。
当您已经可以通过 maxOutOfOrderness 实现相同的行为时,为什么要使用 AllowedLateness。
如果您只使用 Allowedlateness,则无需等待,因为迟到的元素将乱序,因此将被丢弃。
如果您只使用 MaxOutOfOrderness,那么它会延迟 window 计算,但它可以处理乱序事件。
MaxOutOfOrderness 确定流的水印滞后于迄今为止观察到的最大时间戳的程度——这反过来又决定了任何事件时间计时器何时触发。这些计时器可能属于 windows,或进程函数。
水印还定义了哪些事件是迟到的——时间戳小于当前水印的事件是迟到的。
windowAPI有一个允许迟到的概念,它决定了window状态保留的时间。当水印通过 window 的终点时,事件时间 window 将触发——并且在允许延迟的情况下,window 将在每次延迟时再次触发事件到达,直到允许的迟到期满(此触发行为可以自定义——这是默认设置)。一旦允许的迟到期满,window 的状态就会被清除,此后迟到的事件要么被丢弃,要么被发送到侧面输出(如果配置了一个)。
所以,总结一下:
AllowedLateness 仅适用于事件时间 windows,而 MaxOutOfOrderness 适用于水印的所有使用(例如,流程功能)。
同时拥有这两种机制很有用,因为您可以让 windows 在水印定义的自然 window 结尾触发,并在延迟事件到达时再次触发更新结果。
水印的目的是控制延迟和完整性之间的权衡。能够要求以低延迟(即相对较短的 MaxOutOfOrderness)产生结果,同时适应相当晚的事件是很有用的。
并纠正一件事:如果 MaxOutOfOrderness 为零并且有 AllowedLateness,那么您可能会有很多延迟事件(除非一切都井井有条),但它们只会被删除(由 window) 如果他们的迟到超过允许的迟到。