在Flink中广播变量和作为参数传递有什么区别?

问题描述

在flink中,要将变量序列化为节点,可以将参数作为参数传递给运算符

env = ...map(new MapFunction(param))

并且也可以广播

dataset.map(...).withbroadcastSet()

实际上paramdataset都是程序中的变量,没有字面差异。

那么这些方法之间到底有什么区别?

解决方法

如果您使用参数传递数据,则参数和MapFunction在客户端进行初始化,并将被序列化到包含此MapFunction的每个任务。

如果您使用广播数据集,则广播数据将通过Flink的管道发送。

换句话说,区别在于广播数据是否已序列化为任务的部署。如果它的大小很大,则会对部署性能造成不利影响。