知识卡片
分布式缓存与广播变量的边界
内容
分布式缓存和[[广播变量让所有并行实例共享一份数据|广播变量]]解决的是同一类问题——避免多个并行任务各自重复获取同一份外部资源,但作用的对象不同:分布式缓存针对的是本地文件或目录,注册后框架只会把它复制一次到每个TaskManager节点的本地文件系统,后续所有任务直接通过文件系统API读取,适合体积较大、静态不变、需要按文件方式访问的资源;广播变量针对的是已经加载进内存的数据集,且可以做成随时间更新的流。选择哪种本质上取决于这份公共资源的形态:需要以文件形式随用随读、体积偏大就用分布式缓存;需要作为内存中的结构化数据参与计算、甚至希望它能动态更新就用广播变量,两者不是互相替代关系,而是针对不同资源形态各自的最优解。
参考来源
《Flink入门与实战》第6章《DataStream API和DataSet API》