Apache flink 从ListState中删除选定项

Apache flink 从ListState中删除选定项,apache-flink,Apache Flink,我正在实现具有大状态(可能不适合内存)的自定义运算符。为此,我正在尝试使用ListState。 我正在使用 checkpointedState = context.getOperatorStateStore().getListState(descriptor); 如中所述 上面链接中snapshotState()的实现将清除checkpointedState,然后将内存数据结构中的元素添加到checkpointedState 相反,我需要在snapshotState()中使用如下内容: 删除c

我正在实现具有大状态(可能不适合内存)的自定义运算符。为此,我正在尝试使用ListState。 我正在使用

checkpointedState = context.getOperatorStateStore().getListState(descriptor);
如中所述

上面链接中snapshotState()的实现将清除checkpointedState,然后将内存数据结构中的元素添加到checkpointedState

相反,我需要在snapshotState()中使用如下内容:

  • 删除checkpointedState而不是clear()的特定条目
  • 将内存中数据结构中的新元素添加到checkpointedState

  • 是否有任何方法可以选择性地从ListState中删除项?

    否,从ListState中删除特定元素不幸地是不可能的。 如果要保留特定的列表项,则必须先将它们提取到集合中,然后清除
    ListState
    ,然后再次插入它们

    在您引用的示例中,所有状态对象都存储在
    bufferedElements
    变量中,并且仅在完成检查点时插入到
    ListState
    中。这意味着,完整的运算符状态始终存储在JVM堆的
    bufferedElements
    中。您也可以将操作符状态的一部分存储在
    ListState
    中(而不是将其保存在堆中),但是访问单个元素的成本非常高,因为您必须遍历迭代器