flink相比于其他流计算引擎的一个非常大的优势在于它灵活可靠的状态管理机制,定时的快照可以保证实时计算的连续性与准确性,但是当后续的计算逻辑发生一定程序的变化时,并不能完全保证从原状态完整的恢复。
文章主要分为三部分:
- 问题复现及源码分析
- flink state ttl的设置和创建
- flink checkpoint在taskmanager中对state的快照
1、问题概要
商品热度值的flink实时计算作业的chekcpoint state size越来越大,于是计划对一个月内无任何分享、出价、收藏的商品的state进行清理(包括redis的expired),于是使用StateTtlConfig进行状态过期设置,出现如下错误:
2020-07-10 08:59:01
java.lang.RuntimeException: Error while getting state
at org.apache.flink.runtime.state.DefaultKeyedStateStore.getState(DefaultKeyedStateStore.java:62)
at org.apache.flink.streaming.api.operators.StreamingRun