分析&回答 user actions 可以看作是事件流(普通流) patterns 为广播流,把全量数据加载到不同的计算节点。 广播流 Broadcast是一份存储在TaskManager内存中的只读的缓存数据 在执行job的过程中需要反复使用的数据,为了达到数据共享,减少运行时内存消耗,我们就用广播变量进行广播 广播流好处 从clinet端将一份需要反复使用的数据封装到广播变量中,分发到每个TaskManager的内存中保存 TaskManager中的所有Slot所管理的线程在执行task的时候如果需要用到该变量就从TaskManager的内存中读取数据,达到数据共享的效果,与Spark中的广播变量效果时一样 普通双流join 根据join 条件,根据key的发到同一个计算节点,如下图类似 反思&扩展 广播流使用注意点: 广播变量中封装的数据集大小要适宜,太大,容易造成OOM 广播变量中封装的数据要求能够序列化,否则不能在集群中进行传输 哪种 Join 可以满足单个流断流的时候仍然能够保证正确的 Join 到数据? 广播流Join