我在使用 kstream 连接时遇到问题。我所做的是从一个主题中分离出 3 种不同类型的消息到新的流中。然后用两个创建另一个流的流进行一次内连接,最后我对新流和最后一个剩余流进行最后一次左连接。连接的窗口时间为 30 秒。这样做是为了过滤掉一些被其他人覆盖的消息。我在 kubernetes 上运行此应用程序,并且 pod 的磁盘空间无限增长,直到 pod 崩溃。我意识到这是因为连接将数据本地存储在 tmp/kafka-streams 目录中。这些目录被称为:KSTREAM-JOINTHIS... KSTREAM-OUTEROTHER..它存储来自 RocksDb 的 sst 文件,并且这些文件无限增长。我的理解是,因为我使用 30 秒的窗口时间,所以这些应该在特定时间后被清除,但不是。我还将 WINDOW_STORE_CHANGE_LOG_ADDITIONAL_RETENTION_MS_CONFIG 更改为 10 分钟,看看是否会发生变化,但事实并非如此。我需要了解如何改变这种情况。
1 回答
ITMISS
TA贡献1871条经验 获得超8个赞
窗口大小不会决定您的存储要求,而是连接的宽限期。为了处理乱序记录,数据的存储时间比窗口大小要长。在较新的版本中,需要始终通过JoinWindows. ofTimeDifferenceAndGrace(...)
. JoinWindows.of(...).grace(...)
在旧版本中,您可以通过-- 如果未设置,则默认为 24 小时来设置宽限期。
配置WINDOW_STORE_CHANGE_LOG_ADDITIONAL_RETENTION_MS_CONFIG
配置数据在集群中存储多长时间。因此,您可能也想减少它,但它无助于减少客户端存储需求。
添加回答
举报
0/150
提交
取消