У меня есть топология KStream, где мы используем неперекрывающиеся окна.
.groupBy((userId, brandId) -> brandId, Grouped.with(repartitionTopic, Serdes.String(), Serdes.String()))
.windowedBy(TimeWindows.of(ofMinutes(1)).advanceBy(ofMinutes(1)).grace(Duration.ZERO))
.aggregate(() -> 0L, (key, value, viewCount) -> viewCount + 1, storeBuilder())
.suppress(untilWindowCloses(unbounded())
.toStream()
storeBuilder()
создает хранилище окон, которое является непрочным в хранилище памяти, реализованном так:
Materialized
.as(inMemoryWindowStore(storeName, retentionPeriod, windowSize, false)
.withCachingDisabled()
.withLoggingDisabled()
.withKeySerde(keySerde)
.withValueSerde(valueSerde);
Мы не используем какие-либо GlobalKTables. Однако, глядя на использование кучи памяти, я вижу, что GlobalStreamThread
потребляет 70% памяти JVM и время от времени вызывает сбой JVM, выделяя слишком много памяти.
Я быХотелось бы знать, что делает GlobalStreamThread
и является ли это результатом незагруженного хранилища окон?