Java GlobalStreamThread正在使用所有JVM内存
我有一个KStream拓扑,我们使用非重叠窗口Java GlobalStreamThread正在使用所有JVM内存,java,apache-kafka-streams,Java,Apache Kafka Streams,我有一个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, v
.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);
我们不使用任何类型的表格。然而,通过查看堆内存使用情况,我发现有GlobalStreamThread
消耗了JVM 70%的内存,并且有时由于分配了太多内存而导致JVM崩溃
我想知道,这个GlobalStreamThread
正在做什么,这是未标记窗口存储的结果吗?这很奇怪。如果不使用全局KTables或全局state,甚至不应该创建“全局线程”。你用的是什么版本?你能进入KafkaStreams#start()
看看全局线程是否启动了吗?这很奇怪。如果不使用全局KTables或全局state,甚至不应该创建“全局线程”。你用的是什么版本?您能否进入KafkaStreams#start()
查看全局线程是否已启动?