概览
离线批处理中两个表做关联很简单,把两个表的数据根据关联条件做shuffle,然后做匹配就可以了,但是实时的两个流做关联就比较复杂,需要考虑的问题有:
- 两个流是无限的,其中一个流来一条新数据,去另一个流做关联时,怎么确定关联的范围?
- 如果关联范围确定了,那么左右两个流的数据怎么存放?如果使用缓存,那么缓存的清理策略是什么?
- 怎么做排列组合?是full outer join(笛卡尔积)还是left join
- 适用场景有哪些?
接下来分析flink提供的集中流关联的方式,找到以上四个问题的答案
JoinedStreams & CoGroupedStreams
1、怎么确定关联范围
JoinedStreams和CoGroupedStreams的范围都是通过开窗来确定的,两个流具有相同key的record被放到同一个window
DataStream<T