java - Apache Camel 与 Kafka Producer 的内存泄漏

标签 java spring-boot apache-kafka apache-camel

我正在使用 Apache Camel 2.20.2(与 Spring Boot 1.5.8 一起)将通过 MQTT 传入的消息路由到另外两个服务,一个是 HTTP/SOAP(工作正常),另一个是 Apache Kafka。

经过一夜的初始运行(每分钟大约 320 条消息)后,我注意到该过程变得非常慢。经过一些分析,我发现 Kafka 路由产生了内存泄漏(确保禁用了 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 集群,所以不知道为什么内存没有释放?

来自 VisualVM 的屏幕截图,可以看到字节数和字符数组随着每条消息而增长: enter image description here

最佳答案

经过进一步调查,看起来 Camel 使用了你给它的内存,一旦 GC 运行,一切看起来都很好。 我现在正在运行该应用程序,没有在 docker 容器中进行任何重大更改,并且没有任何与内存相关的问题。

关于java - Apache Camel 与 Kafka Producer 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48751648/

相关文章:

java - 使用 kafka-streams 有条件地对 json 输入流进行排序

java - 是否有可能创建一个具有一定长度的 jwt 身份验证 token

java - 不幸的是,应用程序已阻止大脑游戏应用程序中的错误

java - 失败,退出代码 1 Cordova 错误

Spring Boot + Spring OAuth Java配置

spring-boot - 将Maven转换为Spring Initializr的Gradle

elasticsearch - 使用 Kafka 和 ELK 堆栈进行集中式日志记录

java - 如何在 JTable 中填充数据?

java - 我的 InfoContributor 未向 Actuator 端点发送信息

python - 消费者重启后,kafka-python 从最后生成的消息中读取