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​

flink sql状态清理问题_flink

总结:

这是一个bug,预计将会在Flink 1.12版本修复