我正在使用Apache Camel 2.20.2(与Spring Boot 1.5.8一起)将通过MQTT传入的消息路由到另外两个服务,一个是HTTP / SOAP(工作正常),另一个是Apache Kafka。
在初次运行过夜,每分钟约有320条消息后,我发现这个过程非常缓慢。经过一些分析后,我发现Kafka Route会产生内存泄漏(确保禁用HTTP路由)。
@Component
public class Router extends RouteBuilder {
@Autowired
ApplicationProperties param;
@Override
public void configure() throws Exception {
logger.info("Starting MqttKafkaBridgeApplication with:\n" + param.toString());
// MQTT Consumer
from("mqtt:vernemq?"
+ "host=tcp:MqttHost:MqttPort...")
.transform(body().convertToString())
.log("Recieved : "+body().convertToString())
.multicast()
.stopOnException().to( "direct:kafka");
// Kafka Producer
from("direct:kafka")
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(KafkaConstants.PARTITION_KEY, 0);
exchange.getIn().setHeader(KafkaConstants.KEY, "1");
}
})
.to("kafka:" + "kafkaTopic" +
"?brokers=kafkaHost:KafkaPort;
}
}
我是Camel的新手,但据我所知,我的配置非常简单? 我可以看到消息到达Kafka集群,所以不知道为什么内存没有被释放?
答案 0 :(得分:0)
经过进一步调查后,看起来Camel使用尽可能多的内存,一旦GC运行,一切看起来都很好。 我现在正在运行应用程序而没有在docker容器中进行任何重大更改,并且没有任何与内存相关的问题。