窗口

Tumbling Window(滚动窗口)
Sliding Window(滑动窗口)
Session Window
时间是左闭右开
windowAll

  1. Time.milliseconds(x)
  2. Time.seconds(x)
  3. Time.minutes(x)
  4. // 设置偏移量为东八区
  5. input
  6. .keyBy(<key selector>)
  7. .window(TumblingEventTimeWindows.of(Time.days(1), Time.hours(-8)))

Trigger(触发器)

Evictor(驱逐器)

Watermark

生成

SourceFunction和流程中指定

SourceFunction

  1. // element是数据,timestamp是event time时间戳。
  2. collectWithTimestamp(T element, long timestamp);
  3. emitWatermark(Watermark mark);

流程中指定

  1. DataStream.assignTimestampsAndWatermarks()

两类:定期生成和更具特殊记录生成。
AssignerWithPeriodicWatermarks:定时生成。
AssignerWithPunctuatedWatermarks:每来一个记录都会调用一次。
最佳实践:DataStream越靠近Source越好。更多算子可以判断是否乱序。

Watermark传播

单输入取最大,多输入取最小。

Time

ProcessFunction

Table API

从DataStream转化和通过TableSource生成。

processing time

proctime必须添加到最后。

  1. tEnv.fromDataStream(stream, "f1, f2, f3.proctime");

TableSource实现DefinedProctimeAttributes接口

event time

要求:DataStream里得有TIMESTAMP和Watermark。

  1. tEnv.fromDataStream(stream, "f1, f2, f3.rowtime");

TableSource实现DefinedRowtimeAttributes接口。要求:必须存在LONG或TIMESTAMP字段。

数据和元数据

DataStream API 时间是元数据。
SQL & Table API 时间是数据。

Upsert Stream 不允许出现时间字段。只能当元数据。

干涉Watermark传播