开发者社区> 问答> 正文

如何正确的利用StateTtlConfig为State设置过期时间

各位Flink的朋友们你们好,我在使用Flink的过程中遇到两个问题,请教一下大家,问题如下:

  1. StateTtlConfig只是为一个StateTable下面的所有数据设置过期,并不能支持对一个KeyStream中的每一个key对应的数据设置过期时间。就拿Using Managed Keyed State 的CountWindowAverage 例子来说我无法对上游来的KeyedStream中的每一个element指定过期时间,或者说我没法定制化KeyStream中满足特定key构建规则的元素的过期时间。这个需求是因为我们应用原来的计算的中间结果合最终结果是存储在Redis里面的,不同的数据可以有不同的过期时间,这在redis中是很好实现的,但是在Flink中貌貌似不可以。

  2. Flink里面有一个QueryableStateCient的工具可以查询其他其他Operator存储的State数据,但是我看官方的文档写是一个Beta项目,其他的一些人也有分析这个工具除了一些状态类型的限制之外,他受限制与nettyServer和StateBackend本身的性能,所以他并不适合受用于高并发、高吞吐的场景。这个问题主要是结合我们自己的应用来考虑我们目前的计算结果都是通过Redis做中间存储的,虽然Redis的数据类型很丰富但是我们自己应用使用了一些比较复杂的数据结构放到Redis中会有一些序列化反序列的开销另外还有外部存储的开销,所以想将结果存到Flink中。但是目前对这个QueryableStateCient工具的实际性能存有疑问,大家有没有一些对这个工具的场景使用的,已经有相应的性能的数据分享一下。*来自志愿者整理的flink邮件归档

展开
收起
毛毛虫雨 2021-12-07 12:40:20 655 0
1 条回答
写回答
取消 提交回答
    1. StateTtlConfig目前只能做到state层级的,目前还不支持每个key设置一个超时时间的。如果过期时间比较短的话,其实可以考虑给key附上自定义的时间戳用window来满足你的需求。
    2. 就我所知,queryable state的工业级应用的话,有一个拿来做记账系统的[1],他们也在Github上分享了相关源码demo[2]。还有一个是实验性质或者说更像爱好领域的应用,将queryable state用在在线机器学习中[3]。国内似乎没有大规模使用queryable state的,如果您那里有什么进展或者尝试也欢迎分享。

    [1] https://2017.berlinbuzzwords.de/17/session/queryable-state-or-how-build-billing-system-without-databasehttps://2017.berlinbuzzwords.de/17/session/queryable-state-or-how-build-billing-system-without-database [2] https://github.com/knaufk/queryable-billing [3] https://www.slideshare.net/FlinkForward/flink-forward-berlin-2017-fokko-driesprong-vincent-warmerdam-using-queryable-state-to-update-ml-algorithms-per-datapoint-for-online-gaming*来自志愿者整理的flink

    2021-12-07 15:34:05
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载