Apache kafka Kafka Streams窗口存储保存数据的时间比保留期长得多

Apache kafka Kafka Streams窗口存储保存数据的时间比保留期长得多,apache-kafka,apache-kafka-streams,windowing,Apache Kafka,Apache Kafka Streams,Windowing,用例是从没有在kafka流中接收新数据的分区中刷新记录,因为我们正在使用SUPPORT,这需要流时间 因此,我们有一个带有1分钟翻转窗口的窗口存储,减少操作附带抑制。抑制的设计取决于流时间。因此,如果任何分区没有接收到新的使用者记录,那么suppress将不会对该分区中挂起的使用者记录进行处理 值得注意的是,状态存储的保留期设置为65秒 因此,为了从窗口状态存储执行显式刷新,决定使用tranform api并在DSL拓扑中使用 在转换节点中,我们使用context.schedule来调度标点或访

用例是从没有在kafka流中接收新数据的分区中刷新记录,因为我们正在使用SUPPORT,这需要流时间

因此,我们有一个带有1分钟翻转窗口的窗口存储,减少操作附带抑制。抑制的设计取决于流时间。因此,如果任何分区没有接收到新的使用者记录,那么suppress将不会对该分区中挂起的使用者记录进行处理

值得注意的是,状态存储的保留期设置为65秒

因此,为了从窗口状态存储执行显式刷新,决定使用tranform api并在DSL拓扑中使用

在转换节点中,我们使用context.schedule来调度标点或访问状态存储,并运行一个窗口查询,即fetchall(startTimeInstant,endTimeInstant)来获取仍然未刷新的旧密钥

从文档中值得注意的是,保留期是数据在window store中停留的最短时间。只有当窗口中的所有记录都足够旧时,才会刷新它

现在的想法是,当我们运行fetchall时,成功的记录不应该存在于状态存储中(如starttime(utc-3分钟)),但直到6分钟,被刷新的旧数据仍然存在于窗口存储中

这里的问题是,我不希望在窗口存储中看到旧记录,因为必须查看/解析有效负载才能选择是否刷新数据,这是一项性能密集型操作。

我还检查了changelog存储主题压缩/删除策略。它还有65秒

我知道经典的方法是在输入主题的所有分区上发送保持活动的数据包,但这在我们的情况下是不可行的,因为输入主题被多个客户端使用。它们都必须更改