【问题标题】:How to delete state by name for all keys如何按名称删除所有键的状态
【发布时间】:2021-09-28 15:58:43
【问题描述】:

我有流动的状态:

    public static final ValueStateDescriptor<String> MY_STATE_DESCRIPTOR =
            new ValueStateDescriptor<>("myState", String.class);

    static {
        MY_STATE_DESCRIPTOR.setQueryable("QueryableMyState");
    }

    protected transient ValueState<String> myState;

    @Override
    public void open(Configuration parameters) {
        myState = getRuntimeContext().getState(MY_STATE_DESCRIPTOR);
    }

在我的KeyedCoProcessFunction 实现中。但我不再需要它,如果我不知道该状态下的所有键,我无法找到如何删除该 "myState" 中的所有条目。

【问题讨论】:

    标签: apache-flink rocksdb


    【解决方案1】:

    我假设您在此应用程序中还有其他不想丢失的状态。

    几个选项:

    (1) 使用状态处理器 API 修改保存点。只结转您想要保留的状态。或者使用状态处理器 API 转储出所有有状态的键的列表,然后使用该知识来清除它。请参阅ReadRidesAndFaresSnapshot.java 了解如何将此 API 与从this application 拍摄的状态快照一起使用的示例。

    (2) 暂时将KeyedCoProcessFunction转成具有相同UID的KeyedBroadcastProcessFunction,并使用applyToKeyedState方法循环遍历所有键并清除状态。 (这是一个有点 hacky 的解决方案,我只是为了好玩。)

    (3) 扔掉所有的状态,重新开始。

    【讨论】:

    • 谢谢。第二点对我最有用。
    【解决方案2】:

    状态TTL可以达到同样的效果吗?可以将生存时间 (TTL) 分配给任何类型的键控状态。如果配置了 TTL 并且状态值已过期,则将尽最大努力清理存储的值,这将在下面更详细地讨论。

    【讨论】:

      猜你喜欢
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2021-04-27
      • 2018-04-01
      相关资源
      最近更新 更多