问题描述
在flink中,要将变量序列化为节点,可以将参数作为参数传递给运算符
env = ...map(new MapFunction(param))
并且也可以广播
dataset.map(...).withbroadcastSet()
实际上param
和dataset
都是程序中的变量,没有字面差异。
那么这些方法之间到底有什么区别?
解决方法
如果您使用参数传递数据,则参数和MapFunction在客户端进行初始化,并将被序列化到包含此MapFunction的每个任务。
如果您使用广播数据集,则广播数据将通过Flink的管道发送。
换句话说,区别在于广播数据是否已序列化为任务的部署。如果它的大小很大,则会对部署性能造成不利影响。