Apache flink 从ListState中删除选定项
我正在实现具有大状态(可能不适合内存)的自定义运算符。为此,我正在尝试使用ListState。 我正在使用Apache flink 从ListState中删除选定项,apache-flink,Apache Flink,我正在实现具有大状态(可能不适合内存)的自定义运算符。为此,我正在尝试使用ListState。 我正在使用 checkpointedState = context.getOperatorStateStore().getListState(descriptor); 如中所述 上面链接中snapshotState()的实现将清除checkpointedState,然后将内存数据结构中的元素添加到checkpointedState 相反,我需要在snapshotState()中使用如下内容: 删除c
checkpointedState = context.getOperatorStateStore().getListState(descriptor);
如中所述
上面链接中snapshotState()的实现将清除checkpointedState,然后将内存数据结构中的元素添加到checkpointedState
相反,我需要在snapshotState()中使用如下内容:
是否有任何方法可以选择性地从ListState中删除项?否,从ListState中删除特定元素不幸地是不可能的。 如果要保留特定的列表项,则必须先将它们提取到集合中,然后清除
ListState
,然后再次插入它们
在您引用的示例中,所有状态对象都存储在bufferedElements
变量中,并且仅在完成检查点时插入到ListState
中。这意味着,完整的运算符状态始终存储在JVM堆的bufferedElements
中。您也可以将操作符状态的一部分存储在ListState
中(而不是将其保存在堆中),但是访问单个元素的成本非常高,因为您必须遍历迭代器