Flink中双流join有哪些方式?

提问者:帅平 问题分类:面试刷题
Flink中双流join有哪些方式?
1 个回答
鹿隐林间べ心随影动
鹿隐林间べ心随影动
flink的批处理有两种方式处理表的join操作,分别是sort-merge join和hash join。前者是将参与join的两个数据集进行排序后,利用归并排序的思想将他们进行join操作。后者则是令数据集经过hash的方式映射到不同bucket中,再进行join操作。
在双流join的场景中,join的对象是两个数据流,所以我们的结果也需要不断地更新。对于这种数据流的join有以下三种方式:
1、Regular join :regular join 需要持续保留两个流的状态,两边的数据对于对方的流都是可见的,所以数据就需要持续性的存在于state里面,但是state又不能存的过大,因此只适合有界数据流。
2、Interval join :加入了一个时间窗口的限定,要求在两个流做 Join 的时候,其中一个流必须落在另一个流的时间戳的一定时间范围内,并且它们的 Join key 相同才能够完成 Join。加入了时间窗口的限定,就使得我们可以对超出时间范围的数据做一个清理,这样的话就不需要去保留全量的 state。Interval Join 是同时支持 processing time 和 even time去定义时间的。如果使用的是 processing time,flink内部会使用系统时间去划分窗口,并且去做相关的 state 清理。如果使用 even time 就会利用 Watermark 的机制去划分窗口,并且做 State 清理。
3、Window join :将两个流中有相同 key 和处在相同 window 里的元素去做 Join。必须同时满足 Join key 相同,而且在同一个 Window 里元素才能够在最终结果中输出。
发布于:3个月前 (02-06) IP属地:四川省
我来回答