Flink 关于设置状态生命周期

目录

使用场景

设置生命周期


使用场景

        一般设置状态的生命周期的目的无非就是减少服务器的资源占用,在生成环境中,对状态设置生命周期,例如设置1天后自动清除状态(为null)

        一般用来求当天的独立用户数等指标,例如求页面浏览的独立用户数,也就是uv,我们可以设置一个状态来标记该用户当天是否已经访问该页面,如果状态为null,加1,不为null,就需要判断该状态(一般存储的是用户浏览的日期)是否等于当天,不等,加1并更新状态,否则,不做处理。

        这里就涉及一个问题,状态假如不为null,那么用户如果5天不访问,状态也跟着保存5天,显然,在数据量大的时候,无疑很占用资源。

        这时我们可以给状态设置一个生命周期,设置为1天并且当状态更新时,生命周期也重新刷新,假如一个用户上一次浏览的日期为2023-03-04 8:00:00,其中状态没有更新,那么状态将会在2023-03-05 8:00:00过期(为null),就算此时用户在2023-03-05 7:00:00或者2023-03-05 9:00:00浏览,同样加1,同样符合我们求日活uv。

设置生命周期

private ValueState<String> valueState;

@Override
public void open(Configuration parameters) throws Exception {
    // 设置状态生命周期
    StateTtlConfig stateTtlConfig = new StateTtlConfig
        .Builder(Time.days(1)) // 周期为1天
        .setUpdateType(StateTtlConfig.UpdateType.OnCreateAndWrite) // 创建或者更新状态时重新刷新生命周期
        .build();
    ValueStateDescriptor<String> valueStateDs = new ValueStateDescriptor<>("last_order_state", String.class);
    valueStateDs.enableTimeToLive(stateTtlConfig);
    valueState = getRuntimeContext().getState(valueStateDs);
}

猜你喜欢

转载自blog.csdn.net/m0_55868614/article/details/129335426