Flink中设置状态的超时

在监控中保存某个状态值,但是过一段时间后需要将该值清理掉,防止对业务有影响或者堆积浪费存储空间。

flink提供了状态超时设置。

实例如下:

  class MyFilter extends RichFilterFunction[JSONObject]{

    var dateState: ValueState[String] = _
    val sdf: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd")

    override def open(parameters: Configuration): Unit = {
      val valueStateDesc = new ValueStateDescriptor[String]("date-state",classOf[String])
      //设置状态的超时时间以及更新时间的策略
      val stateTtlConfig = StateTtlConfig.newBuilder(Time.hours(24)).setUpdateType(UpdateType.OnCreateAndWrite).build()
      valueStateDesc.enableTimeToLive(stateTtlConfig)
      dateState = getRuntimeContext.getState(valueStateDesc)
    }
    override def filter(value: JSONObject): Boolean = {

      val lastPageId = value.getJSONObject("page").getString("last_page_id")

      //当上一个页面id为空时
      if(null == lastPageId || lastPageId.length <= 0){
          //取出状态数据
          val lastDate = dateState.value()
          //取出今天的日期
          val currDate = sdf.format(value.getString("ts"))
          //判断2个日期是否相同
          if(!currDate.equals(lastDate)){
            dateState.update(currDate)
            return true
          }else {
            return false
          }
      }else {
        false
      }

    }
  }

}

 

这里

StateTtlConfig.newBuilder(Time.hours(24))   //设置状态保存24小时

.setUpdateType(UpdateType.OnCreateAndWrite)  //设置在创建或者更新记录同时,更新超时时间。

.build()

 

posted @ 2022-02-07 17:17  硅谷工具人  阅读(343)  评论(0)    收藏  举报
成功之道,在于每个人生阶段都要有不同的目标,并且通过努力实现自己的目标,毕竟人生不过百年! 所有奋斗的意义在于为个人目标实现和提升家庭幸福,同时能推进社会进步和国家目标! 正如古人讲的正心诚意格物致知,修身齐家治国平天下。