GlobalStreamThread использует всю память JVM - PullRequest
1 голос
/ 15 октября 2019

У меня есть топология 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 и является ли это результатом незагруженного хранилища окон?

...