双流join的问题:
代码如上所示,中间的测试结果就不展示了,直接上结论:
flinksql进行双流join时,如果不指定时间范围,如下图所示
则会出现:当A流数据过来时,会和B流所有历史数据以及当前数据进行join。
如果指定时间范围,则只会和时间范围内的数据进行join。
窗口topn的问题:
如下图所示:
针对于流数据进行求topn或者去重,如果不指定窗口,用传统的批处理方式则无法实现topn或者去重的目的,会发现每条流数据都是top1。只有通过窗口的方式将数据进行收集才能针对于窗口内的数据进行去重或者求topn。
结论3:
使用窗口的时候,输入第1批数据并不会触发窗口计算,只有输入第2批数据才能触发第1批数据的窗口计算,也就是窗口计算需要数据驱动,前1批数据的窗口收集之后,需要通过后1批数据进行驱动计算。
结论4:
flink视图会破坏事件时间的语义,不要基于kakfa或者mysql的数据做视图或者临时表,然后针对于flink视图或者临时表做事件时间的窗口,这样会破坏事件时间的语义,导致报错。正确的做法是直接对kakfa或者mysql的数据通过窗口进行计算。