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

g6baxovj  于 2021-06-04  发布在  Kafka
关注(0)|答案(0)|浏览(226)

用例是从kafka流中没有接收到新数据的分区中刷新记录,因为我们正在使用需要流时间的suppress。
所以我们有一个1分钟的滚动窗口,带有reduce操作和suppress。抑制的设计依赖于流时间。因此,如果任何分区没有接收到新的使用者记录,那么对于该分区中挂起的使用者记录,suppress将不会向前移动。
值得注意的是,状态存储的保留期设置为65秒。
因此,要从窗口状态存储执行显式刷新,决定使用tranformapi并在dsl拓扑中使用。
在transform节点中,我们使用context.schedule来调度标点符号以访问状态存储,并运行一个窗口查询,即fetchall(starttimeinstant,endtimeinstant)来获取仍然没有清除的旧键。
从文档中值得注意的是,保留期是数据在窗口存储中停留的最短时间。只有当窗口中的所有记录都足够旧时,才会刷新它。
现在的想法是,当我们运行fetchall时,成功的记录不应该存在于状态存储中(就像starttime一样(utc-3minutes))。但直到6分钟之前,被冲出的旧数据仍然在窗口商店里。
这里的问题是,我不希望在windowstore中看到旧记录,因为必须查看/解析有效负载才能选择是否刷新数据,这是性能密集型的。
我还检查了changelog存储主题压缩/删除策略。它还有65秒。
我知道经典的方法是在输入主题的所有分区上发送keep-alive数据包,但这在我们的情况下是不可行的,因为输入主题被多个客户机使用。他们都必须改变。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题