知识卡片

广播变量让所有并行实例共享一份数据

专业/工作 · 502.d

内容

当某份数据集需要被所有并行任务共同访问时(比如一张小的规则表、一份维度数据),如果不做特殊处理,每个并行任务只能各自持有一份独立副本,造成不必要的内存重复。广播变量把这份数据集发送一份到每个TaskManager节点,成为该节点上所有相关任务可以共用的全局数据。更进一步,Flink支持把广播变量做成一条可以动态更新的广播流:用BroadcastProcessFunction同时接收业务主流和广播流,processBroadcastElement处理广播流的每次更新(比如更新一份实时变化的SQL注入关键词黑名单),processElement则用当前最新的广播状态去处理主流上的每条业务数据。这让”公共规则可以在作业运行时被在线更新”成为可能,而不需要重启作业去修改一份写死的静态配置。

参考来源

《Flink入门与实战》第6章《DataStream API和DataSet API》