KStreams应用程序 - 过多的内存使用量

时间:2016-12-31 14:35:07

标签: java apache-kafka apache-kafka-streams

我正在运行一个(相对)简单的KStreams应用程序:

  

stream->按键聚合> filter-> foreach

它使用32Gb / 8CPU在AWS EC2上处理~200K记录/分钟

启动后10分钟内,内存使用率超过40%。不久之后(通常不到15分钟)操作系统将OOM杀死它。

配置:

config.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, "450000");
config.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG, 250);
config.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "latest");
config.put(StreamsConfig.TIMESTAMP_EXTRACTOR_CLASS_CONFIG, EventTimeExtractor.class.getName());

config.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, "snappy");
config.put(StreamsConfig.NUM_STANDBY_REPLICAS_CONFIG, "2");

聚合步骤:

KTable<Windowed<String>, String> ktAgg = sourceStream.groupByKey().aggregate(
        String::new,
        new Aggregate(),
        TimeWindows.of(20 * 60 * 1000L).advanceBy(5 * 60 * 1000L).until(40 * 60 * 1000L),
        stringSerde, "table_stream");

使用Kafka 0.10.1.1

关于在哪里寻找罪魁祸首的建议?

旁注:

我尝试使用 NewRelic javaagent检测此应用。当我用-XX:+useG1GC运行它时,它做了标准&#34;使用大量内存然后被杀死#34; 当我删除了G1GC参数时,进程将系统负载运行到&gt;我自己不得不杀了那个。

来自NewRelic的输出没有显示任何令人发指的w / re memory mgmt。

0 个答案:

没有答案