流计算中的 Window 计算 | 青训营笔记

53 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的第5天。

知识点小记

流式计算和批式计算的区别

批式计算流式计算
数据存储HDFS、HiveKafka、Pulsar
数据时效性分钟
准确性精准精准和时效性之间取舍
常用计算引擎Hive、Spark、FlinkFlink
计算模型Exactly-OnceAt-Least-Once/Exactly-Once
资源模型定时调度长期持有
主要业务场景离线天级别业务实时性要求高的业务

事件时间:数据产生的时间

处理时间:数据在流式计算机系统中真正处理时所在机器的当前时间

watermark事件时间计算

       在数据中插入一些Watermark来标识表示系统认为的当前真实的事件时间,其相对比的是机器的时间,在数据乱序的时候,它可以用来在乱序容忍和实时性之间做一个平衡。

watermark传递机制:下游的 subtask 会将接收到的上游的所有 watermark 值的最小值作为该 subtask 的 watermark 的值。

断流

       根据watermark传递机制,如果上游有一个算子的watermark不更新了,则下游的watermark都得不到更新而产生断流。

解决方案:

       设置一个超时时间,当某个算子断流超过配置的超时时间时,会将当前算子置为idle,并下发一个idle状态给下游,下游算子在计算自身 watermark 的时候,可以忽略掉当前是idle的那些算子的watermark而去计算除状态为idle之外的算子的watermark。

迟到数据的处理

迟到的定义:对于迟到最基本的理解可以定义为数据晚于watermark即为迟到。但在window里,一条数据可能会晚于watermark,但是这条数据所属的window并没有触发,这种情况下我们可以定义这条数据是没有迟到的。

处理方法

  • Allow lateness: 设置允许迟到的时间,窗口正常结束后不马上清理,而最多保留允许迟到的时间的时间,这段世间内如果有数据到来,则会继续之前的状态进行计算。
  • SideOutput: 对指定的迟到数据在业务层面进行自主选择处理

数据计算方式

  1. 增量计算:数据来到后直接进行计算

  2. 全量计算:数据来到后不立即计算,而是保存下来,等到窗口要输出结果的时候,才把所有保存的数据进行统一的计算。