流处理中的时间语义

我们介绍流处理场景中的时间相关噶年

在介绍的时候我们假设一个场景,假设有一个手游,我们在进行游戏的时候,可能存在断网情况,如果在某一时刻断了一分钟的网络,那么在重新上线后,刚刚一分钟产生的动作该怎么办呢?

是直接抛弃,还是按照上线后时间来计算,还是按照动作发生的时间来计算?

如果直接按照前两个方式计算,那么可能导致的后果十分糟糕,以至于玩家弃坑.

那么,上述流程中,我们使用了两个不同概念的时间,分别是处理时间 processing time和事件时间 event time

对于处理时间

是指的事件到达流处理算子所在机器的本地时间,如果按照处理时间,那么上面场景中断网时间内事件就丢失了.

对于事件时间

则是数据流中事件实际发生的时间,是事件的一个属性,如果可以以事件时间作为窗口创建逻辑,那么事件即使有延迟,事件时间窗口也可以准确的将事件分配到窗口中,确保了结果的准确性

为了使用事件时间,需要流处理配合可重放的数据流,允许重放历史数据,来做到事件数据的使用.

不过在使用事件时间还有一个问题,就是如何决定事件时间窗口的触发时机,也就是如何规定事件时间的最大延迟,这一点往往需要由开发人员介入,从而判断一个最大延迟时间.

而在流处理系统中,提供了水位线来设定事件时间窗口

水位线是一个全局进度指标,来通知系统达到了某个事件时间的最大延迟.如果算子接收到了时间为T的水位线,就会认为不会再收到任何小于等于T的事件了.

水位线允许在结果的准确性和延迟之间做出取舍,激进的水位线策略保证了低延迟,但是保证性低

水位线过于激进,虽然会增加可信度,但是会无谓的增加延迟.

而整个流处理系统,则是提供了最后一道保障,就是在水位线已经过去之后,还有迟到的事件,提供了自定义处理能力,可以让用户自定义策略来忽略事件或者写入日志等.

那么有了事件时间,处理时间有什么用呢?

对于某些重视处理速度而非准确性地应用,处理时间就会派上用场,比如实时监控仪表盘,直接展示聚合结果.处理时间可以保证低延迟性.事件时间可以保证结果的准确性.

发表评论

邮箱地址不会被公开。 必填项已用*标注