如何与windows操作符一起配置aggregateFunction的状态TTL

问题描述 投票:0回答:1

我有一个 flink 流管道,配置了一些过滤器、map、aggregatorFunction 和 windows 操作符(5 分钟的滚动窗口)。我使用的是增量rocksDB后端(存储在EFS中)。flink部署在集群环境中。

我的检查点大小逐渐增大而不是减小。我认为我的活动密钥将以无限的方式增长(因为我的 keyby() 使用“日期”作为密钥之一)。所以我需要配置状态TTL。

我正在阅读flink文档(https://nightlies.apache.org/flink/flink-docs-master/docs/dev/datastream/fault-tolerance/state/),看起来stateTTL只能为processFunctions配置和 RichFunctions(只有它们有 open() 和 getRuntime 方法)。我的理解正确吗?

我还读到aggregateFunction 本身是无状态的。与 Windows 一起它变得有状态。一旦配置的窗口结束,所有事件都将被清除。但其元数据保持状态。

这个元数据是什么以及何时会被清除。有什么方法可以配置 stateTTL 而无需转移到 RichFunctions 吗?

我提到的一些有用的链接:

  1. 以 RocksDB 作为后端,无 TTL 的 ProcessWindowFunction 窗口状态的清理配置
  2. https://nightlies.apache.org/flink/flink-docs-release-1.12/learn-flink/event_driven.html#example

使用的Flink版本是1.18

java kubernetes apache-flink rocksdb flink-checkpoint
1个回答
0
投票

当窗口触发时,该键/窗口间隔组合的所有状态都将被删除。这包括窗口计时器。因此,如果您的检查点大小确实在持续增长,则说明正在发生其他事情。

如果您的水印没有进展,则可能是窗口没有触发,在这种情况下状态可能会累积。当您有空闲源(或源中的分区,通常使用 Kafka)时,可能会发生这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.