Изначально я сделал более сложное приложение kstream, которое делало много сложных вещей.Работая в течение более длительного периода времени с пиками 1500 одновременных пользователей, я увидел, что память контейнера для модуля просто продолжала расти, даже ночью, когда нагрузка была очень низкой, 10-20 одновременных пользователей.
Так что яначал копаться в коде на предмет утечек памяти, сделал все твики, которые мог улучшить код.Ничто действительно не помогло, кроме улучшения производительности.Поэтому я создал простое приложение для весенней загрузки, которое в основном слушает тему, а затем просто отфильтровывает некоторые события и отправляет их в другую тему.
public static KStreamBuilder evenNumbersTopology(KStreamBuilder builder) {
KStream<String, Integer> kStreamTest = builder.stream(stringSerde, integerSerde, INPUT_TOPIC);
kStreamTest
.filter((k, v) -> filterOutUnevenNumbers(v))
.to(DESTINATION_TOPIC);
return builder;
}
В основном он работал в течение 2 недель натест производительности, который варьировал одновременных пользователей от 0 до 2000.Память продолжала расти, но время от времени стабилизировалась.Может кто-нибудь объяснить мне, что происходит?Я ничего не храню. Я просто передаю все события в новую тему.
Редактировать: Я использую следующие версии:Java 8версия kafka: 2.2.0Spring Boot: 2.1.0.RELEASEВот некоторые графики из JVM:Обратите внимание, что пространство Tenured / Eden / Survivor составляет всего около 15 часов, так как я перезапустил все.Срок пребывания в должности - этот показатель упадет, когда он достигнет 64 МБ
Выживший
Эдем
Также контейнер памяти: