Kafka kstream-kstream join with sliding window 内存使用会随着时间增长直到OOM

Kafka kstream-kstream joins with sliding window memory usage grows over the time till OOM

我在使用 kstream 连接时遇到问题。我所做的是从一个主题开始,我将 3 种不同类型的消息分离到新的流中。 然后对创建另一个流的两个流进行一次内部连接,最后我对新流和最后一个剩余流进行最后一次左连接。

连接的 window 时间为 30 秒。

这样做是为了过滤掉一些被其他人覆盖的消息。

Im 运行 kubernetes 上的这个应用程序和 pods 的磁盘 space 正在无限增长,直到 pod 崩溃。

我意识到这是因为连接将数据本地存储在 tmp/kafka-streams 目录中。

目录名为: KSTREAM-JOINTHIS... KSTREAM-OUTEROTHER..

它存储来自 rocksDb 的 sst 文件,并且这些文件会无限增长。

我的理解是因为我使用了 30 秒的 window 时间,所以这些应该在特定时间后被清除,但不是。

我也将 WINDOW_STORE_CHANGE_LOG_ADDITIONAL_RETENTION_MS_CONFIG 更改为 10 分钟,看看是否有变化,但事实并非如此。

我需要了解如何更改它。

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

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