本文介紹了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
配置數據在集群中存儲的時間長度。因此,您可能也想減少它,但這無助于減少客戶端存儲需求。
這篇關于Kafka kstream-kstream加入了滑動窗口,內存使用量隨著時間的推移不斷增長,直到OOM的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,