【问题标题】:When will flink clean up idle state in flink cep sql?flink 什么时候会清理 flink cep sql 中的空闲状态?
【发布时间】:2021-12-08 18:46:52
【问题描述】:

我正在使用带有闪烁规划器的 flink cep sql。 这是我的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 是一个 kafka 表

我设置 table.exec.state.ttl=10000 并运行我的程序,然后我继续发送消息。

由于我将 state ttl 和 cep 间隔都设置为 10s,所以当我启动它时,10 秒后 state 的大小应该是一个固定的数字。

但事实是状态至少持续增长 15 分钟。另外jvm触发了两次full gc。

有没有我没配置的配置?

【问题讨论】:

    标签: apache-flink flink-sql flink-cep


    【解决方案1】:

    您不能使用检查点大小来估计状态大小——它们没有任何直接的关系。检查点可能包括不可预测的大量正在进行的、过期的或未压缩的数据——这些都不会被视为活动状态。

    恐怕没有任何好的工具可用于准确测量您实际拥有多少状态。但是如果你使用的是 RocksDB,那么你可以启用这些指标

    state.backend.rocksdb.metrics.estimate-live-data-size
    state.backend.rocksdb.metrics.estimate-num-keys
    

    这将为您提供相当准确的估计(但您可能会因为打开它们而付出性能损失)。

    至于您对 CEP 状态的担忧——您应该没问题。只要您有一个使用WITHIN 的模式,CEP 应该能够自动清理状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-31
      • 1970-01-01
      • 2023-01-01
      • 1970-01-01
      • 2022-08-05
      • 1970-01-01
      相关资源
      最近更新 更多