让我们假设我有一个描述符的配置,并且从这里采取了操作:
ValueStateDescriptor<Event> descriptor = ...;
StateTtlConfig ttlConfigOneHourAndReturnExpire = StateTtlConfig.newBuilder(Time.hours(1))
.setUpdateType(StateTtlConfig.UpdateType.OnReadAndWrite)
.setStateVisibility(StateTtlConfig.StateVisibility.ReturnExpiredIfNotCleanedUp).build();
descriptor.enableTimeToLive(ttlConfigOneHourAndReturnExpire);
/*after one hour when the state is expired*/
Event e = state.value(); (step 1 and 2)
e.count = e.count + 1; (step 3)
value.update(e); (step 4)
这是否意味着在1小时后,当状态已经被否决时,事情将按以下顺序发生:
- 返回记录的上一个状态,该状态除已弃用外
- 该记录的上一个状态将在读取之后被清除
- 在传递并清理了以前的状态后更新对象(以读取方式(
- 在这种情况下,更新状态意味着再次创建状态,因为之前的值已经删除,并且此值将需要一个小时,或者状态将在此时而不是在点1被清理,并且对象将不包括更新,并且它将在到达时存储在状态中
希望我能解释自己,因为文件对我来说不清楚。
从我需要在换天时清理状态开始,而使用TTL无法做到这一点,我想在每小时后清理一次状态,但删除之前的状态,更新当前值,然后再创建一个小时的状态,但在丢失之前始终保持以前的状态。
希望这是有意义的,并且有可能以某种方式做到。谨致问候!
如果需要每小时操作一次状态,则创建一个自定义ProcessFunction
并使用计时器触发该操作。