为什么不推荐使用statedescriptor设置默认状态值?

ht4b089n  于 2021-06-24  发布在  Flink
关注(0)|答案(2)|浏览(365)

我找到了方法 public ValueStateDescriptor(String name,TypeInformation<T> typeInfo,T defaultValue) 现在已弃用,文档说明通过检查状态的内容是否为null来管理默认值。我想知道这个建议有什么用?

bmp9r5qi

bmp9r5qi1#

看看flink-5155,它引入了反对意见:
在描述符中使用默认值对于某些序列化程序来说是有问题的,而且我们不会丢失一个特性,因为用户总是可以检查空值,并在必要时使用自己的默认值进行初始化。现在,我们总是强迫人们指定一个默认值,即使他们不需要。
以及相应的pr:https://github.com/apache/flink/pull/3108

lmvvr0a8

lmvvr0a82#

此外,如果您在(rich)函数中使用这个函数,那么您应该按照以下方式在主函数中检查null,如 map() 或者 flatMap() ,不是 open() :

if( state.value() == null ) {
  state.update(...defaultValue...);
}
``` `open()` 不喜欢使用 `state.update()` 在里面。

相关问题