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

76 阅读2分钟

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

一、本堂课重点内容:

  • 概述流批计算、实时离线数仓的区别;window计算定义
  • 介绍实时计算中的Watermark概念
  • window类型及其实现原理、高级优化
  • 描述两个业务场景的需求

二、详细知识点介绍:

Watermark

Flink 中的 Time 分为三种:事件时间、达到时间与处理时间。

  • 事件时间:是事件真实发生的时间。
  • 达到时间:是系统接收到事件的时间,即服务端接收到事件的时间。
  • 处理时间:是系统开始处理到达事件的时间。

Flink文档

This is precisely what watermarks do — they define when to stop waiting for earlier events.

If you want to use event time, you will also need to supply a Timestamp Extractor and Watermark Generator that Flink will use to track the progress of event time.

  • Watermark定义:当前系统认为的事件时间所在的真实时间。(它们定义了何时停止等待较早的事件。

  • Watermark产生:从数据的事件时间来产生。最常见的包括使用当前事件时间的时间减去一个固定的delay,来表示可以可以容忍多长时间的乱序。

  • Watermark传递:上游将watermark传递给下游;下游收到多个watermark后默认取其中最小值来作为自身的watermark,同时它也会将自己watermark传递给它的下游。经过整个传递过程,最终系统中每一个计算单元就都会实时的知道自身当前的watermark是多少。

Window

Flink文档

Computing windowed analytics with Flink depends on two principal abstractions: Window Assigners that assign events to windows (creating new window objects as necessary), and Window Functions that are applied to the events assigned to a window.

image.png

TUMBLE Window (滚动窗口)

  • 每分钟页面浏览量
  • TumblingEventTimeWindows.of(Time.minutes(1))

HOP Window (滑动窗口)

  • 每分钟的页面浏览量每 10 秒计算一次
  • SlidingEventTimeWindows.of(Time.minutes(1), Time.seconds(10))

SESSION Window (会话窗口)

  • 每个会话的页面浏览量,其中会话由会话之间至少 30 分钟的间隔定义
  • EventTimeSessionWindows.withGap(Time.minutes(30))

迟到数据处理

默认情况下,当使用事件时间窗口时,延迟事件会被丢弃。(注意,不是数据的时间晚于watermark就算是迟到,而是它所属的窗口已经被触发了才算迟到)。

1、可以使用称为Side Outputs的机制安排将被丢弃的事件收集到备用输出流

OutputTag<Event> lateTag = new OutputTag<Event>("late"){};

SingleOutputStreamOperator<Event> result = stream.
    .keyBy(...)
    .window(...)
    .sideOutputLateData(lateTag)
    .process(...);
  
DataStream<Event> lateStream = result.getSideOutput(lateTag);

2、drop掉。默认情况下允许的延迟为 0。,watermark后面的元素被丢弃(或发送到侧输出)。

stream.
    .keyBy(...)
    .window(...)
    .allowedLateness(Time.seconds(10))
    .process(...);

注意:side output只有在DataStream的窗口中才可以用,在SQL中目前还没有这种语义,所以暂时只有drop这一个策略。

三、引用参考&推荐书目