1

我在使用 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 分钟,看看是否会发生变化,但事实并非如此。

我需要了解如何改变这种情况。

4

1 回答 1

0

窗口大小不会决定您的存储要求,而是连接的宽限期。为了处理乱序记录,数据的存储时间比窗口大小要长。在较新的版本中,需要始终通过JoinWindows. ofTimeDifferenceAndGrace(...). JoinWindows.of(...).grace(...)在旧版本中,您可以通过-- 如果未设置,则默认为 24​​ 小时来设置宽限期。

配置WINDOW_STORE_CHANGE_LOG_ADDITIONAL_RETENTION_MS_CONFIG配置数据在集群中存储多长时间。因此,您可能也想减少它,但它无助于减少客户端存储需求。

于 2019-03-17T17:06:48.393 回答