计算flink的时候可以有一个旁流的概念
使用底层的process算子,就可以获取到一个ctx 的,可以在map的时候往里写东西
在 main stream上面可以通过 getSideOutput 来获取到这个流,对他进行流的处理
===============================
tumbling timeWindow
timeWindow(Time.minutes(1)) 每一分钟算一次
Sliding timeWindow
timeWindow(Time.minutes(1), Time.seconds(30)) 每30秒一次,追溯前1分钟
session window就是说有多少时间没有消息来了,就算断开了
窗口就是说不满足窗口条件的就剔除了
有三种时间,process time, ingestion time,event time ,分别对应于 flink处理得时间, 进入系统得时间, 时间产生得时间
如果想用event时间有两种办法,在source当中定义且发出watermark
或者定义专门得watermarker
trigger就是看满足什么样条件的时候进行一次计算, evict就是说在trigger后计算之前, 怎么把无效的数据删除
这边的例子就是,车子每开出50,就算一下1秒内的最快速度
watermark其实就相当于在一群不保序得时间当中插入一些间隔
return grades.join(salaries)
.where(new NameKeySelector())
.equalTo(new NameKeySelector())
.window(TumblingEventTimeWindows.of(Time.milliseconds(windowSize)))
.apply(new JoinFunction<Tuple2<String, Integer>, Tuple2<String, Integer>, Tuple3<String, Integer, Integer>>() {
@Override
public Tuple3<String, Integer, Integer> join(
Tuple2<String, Integer> first,
Tuple2<String, Integer> second) {
return new Tuple3<String, Integer, Integer>(first.f0, first.f1, second.f1);
}
});
这个可以进行一些拼接的操作