Kafka kstream-kstream加入了滑动窗口,内存使用量随着时间的推移不断增长,直到OOM

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

联接的窗口时间为30秒。

这样做是为了筛选出某些被其他邮件覆盖的邮件。

我在Kubernetes上运行此应用程序,Pod的磁盘空间一直在无限增长,直到Pod崩溃。

我已经意识到这是因为联接将数据存储在本地的tmp/kafka-stream目录中。

这些目录称为: KSTREAM-JOINTHIS... KSTREAM-OUTEROTHER..

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

我的理解是,由于我使用30秒的窗口时间,这些应该在特定时间之后被清除,但事实并非如此。

我还将WINDOW_STORE_CHANGE_LOG_ADDITIONAL_RETENTION_MS_CONFIG更改为10分钟,以查看是否有不同的更改。

我需要了解如何更改这一点。


解决方案

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

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

相关文章