Q:
在使用flink sql的过程中遇到如下情况,在配置了如下选项后:
val config = tableConfig.getConfiguration()
config.setString(“table.exec.mini-batch.enabled”, “true”)
config.setString(“table.exec.mini-batch.allow-latency”, “5s”)
config.setString(“table.exec.mini-batch.size”, “20”)
无论使用FsStateBackend还是RocksDBStateBackend都无法清理掉空闲状态,运行时可以观察到checkpoint目录下状态大小持续增长; 同一套代码,把这几个配置删掉后,运行时观察checkpoint目录下状态大小不会一直增长,能保持在一个范围内请问这是什么原因?谢谢
A1:
最好也说一下使用的Flink版本以及对应的SQL,这样可以让其他同学容易复现这个问题。
A2:
配置了 TableConfig
中的 minIdleStateRetentionTime
和 maxIdleStateRetentionTime
吗?
Q:
配置了minIdleStateRetentionTime
,
val tConfig = tableEnv.getConfig
tConfig.setIdleStateRetentionTime(Time.minutes(5), Time.minutes(10))
使用的是1.11.0版本,sql就是一个简单测试,按照sessionid groupby count(*),一个sessionid一般1分钟内就会失效,
问题是同一套代码,目前观察到的是配置minibatch后影响状态清理了
A:
我看你开了minibatch,你用了aggregate算子了吗?
Q:
grouby count(*)不是吗
A:
我看了一下mini-batch的聚合函数的实现,的确是没有开启状态清理,我建了一个issue[1] 来跟进修复这个bug。
[1] https://issues.apache.org/jira/browse/FLINK-18872
[2] https://issues.apache.org/jira/browse/FLINK-17096
总结:
这是一个bug,预计将会在Flink 1.12版本修复