美文网首页
(3)Watermarks in Apache Flink Ma

(3)Watermarks in Apache Flink Ma

作者: 丹之 | 来源:发表于2018-11-21 11:07 被阅读9次

4 observations when working with Watermarks in Apache Flink

在下面的示例中,我们有一个带时间戳的事件流,这些事件在某种程度上不按顺序到达。 显示的数字是指示实际发生这些事件的时间戳。 到达的第一个事件发生在时间4,然后是之前发生的事件,时间2,依此类推:



请注意,这是事件时间处理的示例,这意味着时间戳反映事件发生的时间,而不是处理事件的时间。 事件时间处理是一种强大的抽象,可以创建流程应用程序,无论是处理实时数据还是重新处理历史数据,其行为都是一致的。

Observation #1:

我们的流分类器看到的第一个元素是4,但我们不能立即将它作为排序流的第一个元素释放。 它可能已经故障,而早期的事件可能还会到来。 实际上,我们可以从这个流的未来中获得一些神似的知识,我们可以看到我们的流分类器应该至少等到2到达之后再产生任何结果。
Some buffering, and some delay is necessary.

Observation #2:

如果我们做错了,我们可能会永远等待。 首先,我们的应用程序从第4个时间开始看到一个事件,然后从第2个时间开始看到一个事件。从早于2的时间开始的事件是否会到达? 也许。 也许不吧。 我们可以永远等待,永远不会看到1。
Eventually, we have to be courageous and emit the 2 as the start of the sorted stream.

Observation #3:

我们需要的是某种策略,它定义了对于任何给定的时间戳事件何时停止等待早期事件的到来。
This is precisely what watermarks do — they define when to stop waiting for earlier events.

Observation #4:

We can imagine different policies for deciding how to generate watermarks.
我们知道每个事件都会在延迟一段时间后到达并且这些延迟会有所不同,因此有些事件会比其他事件延迟更多。 一种简单的方法是假设这些延迟受到一些最大延迟的限制。 Flink将此策略称为有界无序水印。 很容易想象出更复杂的水印方法,但对于许多应用来说,固定延迟效果还不错。
如果要构建像流分类器这样的应用程序,Flink的ProcessFunction是正确的构建块。 它提供对事件时间计时器的访问(即,基于水印到达而触发的回调),并具有用于管理缓冲事件所需状态的挂钩,直到轮到它们被发送到下游。

https://data-artisans.com/blog/watermarks-in-apache-flink-made-easy

相关文章

网友评论

      本文标题:(3)Watermarks in Apache Flink Ma

      本文链接:https://www.haomeiwen.com/subject/pxvqqqtx.html