flink什么时候清理flink cepsql中的idle state?
When will flink clean up idle state in flink cep sql?
我正在使用 flink cep sql 和 blink planner。
这是我的 sql
select * from test_table match_recognize (
partition by agent_id,room_id,call_type
order by row_time // process time
measures
last(BF.create_time) as create_time,
last(AF.connect_time) as connect_time
one row per match after match SKIP PAST LAST ROW
pattern (BF+ AF) WITHIN INTERVAL '10' SECOND
define
BF as BF.connect_time = 0,
AF as AF.connect_time > 0
) as T ;
test_table是卡夫卡table
我设置 table.exec.state.ttl=10000 和 运行 我的程序然后我继续发送消息。
由于我把state ttl和cep interval都设置为10s,所以我启动状态10秒后state的大小应该是固定的。
但事实是状态持续增长至少 15 分钟。此外,jvm触发了两次full gc。
有没有我没有配置的配置?
您不能使用检查点大小来估计状态大小——它们没有任何直接的相关性。检查点可能包括不可预测数量的传输中、过期或未压缩的数据——none 将被计为活动状态。
恐怕没有任何好的工具可用于准确测量您实际拥有多少状态。但是如果你使用的是 RocksDB,那么你可以启用这些指标
state.backend.rocksdb.metrics.estimate-live-data-size
state.backend.rocksdb.metrics.estimate-num-keys
这会给你一个相当准确的估计(但你可能会因为打开它们而付出性能损失)。
至于你对 CEP 状态的担忧——你应该没问题。任何时候你有一个使用 WITHIN
的模式,CEP 应该能够自动清除状态。
我正在使用 flink cep sql 和 blink planner。 这是我的 sql
select * from test_table match_recognize (
partition by agent_id,room_id,call_type
order by row_time // process time
measures
last(BF.create_time) as create_time,
last(AF.connect_time) as connect_time
one row per match after match SKIP PAST LAST ROW
pattern (BF+ AF) WITHIN INTERVAL '10' SECOND
define
BF as BF.connect_time = 0,
AF as AF.connect_time > 0
) as T ;
test_table是卡夫卡table
我设置 table.exec.state.ttl=10000 和 运行 我的程序然后我继续发送消息。
由于我把state ttl和cep interval都设置为10s,所以我启动状态10秒后state的大小应该是固定的。
但事实是状态持续增长至少 15 分钟。此外,jvm触发了两次full gc。
有没有我没有配置的配置?
您不能使用检查点大小来估计状态大小——它们没有任何直接的相关性。检查点可能包括不可预测数量的传输中、过期或未压缩的数据——none 将被计为活动状态。
恐怕没有任何好的工具可用于准确测量您实际拥有多少状态。但是如果你使用的是 RocksDB,那么你可以启用这些指标
state.backend.rocksdb.metrics.estimate-live-data-size
state.backend.rocksdb.metrics.estimate-num-keys
这会给你一个相当准确的估计(但你可能会因为打开它们而付出性能损失)。
至于你对 CEP 状态的担忧——你应该没问题。任何时候你有一个使用 WITHIN
的模式,CEP 应该能够自动清除状态。