美文网首页实时数仓
流处理中的时间概念和窗口类型

流处理中的时间概念和窗口类型

作者: afansdie | 来源:发表于2019-07-27 22:41 被阅读0次

    流处理中主要有三个时间概念,分别是事件时间、处理时间、摄取时间。

    事件时间是指事件实际发生的事件。更准确地说,每一个时间都有一个与它相关的时间戳,并且时间戳是数据记录的一部分。

    处理时间是指事件被粗粝的事件。处理时间其实就是处理事件的机器所测量的时间。

    摄取时间,也叫做进入时间,是指事件进入流处理框架的事件。缺乏真实事件时间的数据会被流处理器附上事件戳,即流处理器第一次看到它的事件。

    在现实世界中,许多因素使得事件时间和处理事件存在偏差。事件时间顺序和处理时间顺序通常不一致,这意味着时间以乱序到达流处理器。根据应用程序的不同,两个时间概念都很有用。有些应用程序需要尽可能快地得到结果,即使有小的误差也没关系。他们不必等待迟到的时间,因此适合采用处理时间语义。其他一些应用程序则对准确性有要求:只有在时间窗口内发生的时间才能被算进来。对于这些应用程序来说,事件时间语义才是正确的选择。也有两者都采用的情况,比如既要准确的计数,又要提供异常预警。

    Flink允许用户根据所需的寓意和准确性的要求选择采用事件时间、处理时间或摄取时间定义窗口。当采用事件时间定义窗口,应用程序可以处理乱序事件流以及变化的事件时间偏差,并根据事件实际发生的时间计算出有意义的结果。

    时间窗口

    时间窗口是最简单和最有用的一种窗口。它支持滚动和滑动。滚动是收集制定时间内的数值并在收集结束后输出总和,窗口之间没有重叠。而滑动是计算指定最近一段时间(一分钟)内的数值总和,但每隔半分钟滑动一次并输出结果,窗口之间有重叠

    计数窗口

    计数窗口分组依据不再是时间戳,而是元素的数量。每隔指定的元素滑动一次。虽然计算窗口游泳,但是其定义不如时间窗口严谨,因此要谨慎使用。时间不会停止,而时间窗口总会关闭。但就计数窗口而言,窗口永远不会关闭,被该窗口占用的内存也就浪费了。一种解决办法就是用时间窗口来出发超时。

    会话窗口

    会话是指活动阶段,其前后都是非活动阶段。会话需要有自己的处理机制,因为它们通常没有固定的持续时间,或者没有固定的交互次数。Flink是目前唯一支持会话窗口的开源流处理器。在Flink中,会话窗口由超时时间设定,即希望等待多久才认为会话已经结束。

    相关文章

      网友评论

        本文标题:流处理中的时间概念和窗口类型

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