开发者社区> 问答> 正文

Flink ValueState<JSONObject> checkpoint失败,导致状态重置

已解决

问题

想用flink 的valueState 加上ttl的特性来做中间状态的存储,但是发现假如直接用ValueState来保存中间状态是没问题的,但是假如加上TTL的特性之后checkpoint就失败了,导致无法使用。

代码示例

image

报错信息

image

debug

image
这个会不为2,导致checkpoint 失败,task重启,open方法重新执行,状态重置。

疑问

  • 要用TTL这个特性是否一定要用rocksDB作为checkpoint的存储介质?我看官网的文档并没有这个说明;
  • 还是fastJson 的JSONObject无法序列化导致的,但是为什么不加TTL是可以使用的?
  • 应该怎么才能用ValueState 加上TTL这个淘汰机制呢(实现比如最近3天这个key没有更新,状态重置,重新从0开始计算,目前我是用了redis来做的,想直接用flink的状态来替换)?

展开
收起
风颖尘 2018-12-05 10:06:32 4038 0
1 条回答
写回答
取消 提交回答
  • 个人博客: http://wuchong.me
    采纳回答

    我觉得这个应该是个 bug,可以在Flink 邮件列表中提问下。

    可以不用 TTL 机制,可以通过 ProcessFunction 注册 3天的 Timer 来绕过,Timer 回调时删除对应 key 的状态。


    社区同学提醒,一护:这个问题最新版应该已经解了,是因为ttl state的序列化器在duplicate的时候少传了一个参数

    issue 链接:https://issues.apache.org/jira/browse/FLINK-10567
    1.6.3 版本已经修复了这个问题。

    2019-07-17 23:18:18
    赞同 2 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Flink CDC Meetup PPT - 龚中强 立即下载
Flink CDC Meetup PPT - 王赫 立即下载
Flink CDC Meetup PPT - 覃立辉 立即下载