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

128 阅读2分钟

  这是我参与「第四届青训营 」笔记创作活动的的第13天。本篇笔记对于7.26日李本超老师讲授的《流计算中的 Window 计算》的内容做一个复习总结。


概述
  • 流式和批式计算的区别概述

image.png

  • T + 1
    -> 小时级别(模型复杂,很多场景做不到)
    -> 实时计算:处理计算窗口,数据实时流动,实时计算,窗口结束直接发送结果,不需要周期调度任务

  • 事件时间 & 处理时间:理想状态应该 y = x,但是处理比事件会多一些延迟

    • 事件时间:数据产生的时间,比如客户端、传感器、后端上报数据时的时间
    • 处理时间:数据在流式计算系统中真正处理时所在机器的时间。
  • 事件时间窗口:数据实时进入到真实事件发生的窗口中进行计算,可以有效处理数据延迟和乱序(引入 watermark 机制)

  • watermark:数据中插入一些 watermark,表示真实时间,下图为乱序数据的 watermark,表示真实时间之前的数据已经计算完成,后面如果还有更小的为迟到数据特殊处理

image.png


Watermark
  • watermark 的产生

image.png

  • watermark 的传递:下游取多个上游的最小 watermark

  • per - partition VS per - subtask watermark 生成:

    • per - subtask:当一个 source subtask 消费多个 partition,那多个 partition 间的数据读取乱序程度可能高
    • per - partition:新机制进入了单个 partition 对应单独 watermark,避免了上述问题
  • 部分 partition / subtask 断流(有一个上游不更新,下游也不更新):设置了 Idle source,某个 subtask 超过配置的 idle 时间,设置为 idle 状态并下发,下游忽略掉 idle 态的 subtask

  • 迟到数据处理:算子自身决定

    • Window 聚合:默认丢弃
    • 双流 join :outer join 认为 join不到
    • CEP:丢弃

Window

待补充