Kafka 版本:3.0.1- 重复创建 kafka 管理客户端 - 内存泄漏

问题描述 投票:0回答:2

我们有 springboot 应用程序,它从单个主题消费并生成多个主题的记录。

最近将此应用程序升级到Sprinboot-2.6.7,并在gradle项目中相应地升级了其他依赖项。

应用程序能够正确地消费和生产,但问题是它似乎重复创建kafka管理客户端(1000秒)并且似乎正在泄漏内存(可能是由于这个原因?),最终导致实例崩溃并且无法跟上滞后。

外部库中一些kafka相关的依赖jar

   org.apache.kafka:kafka-clients:3.0.1   
   org.springframework.cloud:spring-cloud-stream:3.2.3   
   org.springframework.cloud:spring-cloud-stream-binder-kafka:3.2.3   
   org.springframework.cloud:spring-cloud-stream-binder-kafka-core:3.2.3    
   org.springframework.integration:spring-integration-kafka:5.5.11    
   org.springframework.kafka:spring-kafka:2.8.5   

 

这有什么原因吗?缺少配置?

spring-boot apache-kafka out-of-memory spring-kafka spring-cloud-stream
2个回答
0
投票

所以 adminClient 不是问题。问题出在存储输出通道的哈希图的默认大小 10 上。 我已经设置了 spring.cloud.stream.dynamic-destination-cache-size=30,因为我们在应用程序中实际上已经有 17 个输出目的地。 如果此哈希映射“StreamBridge.channelCache”的默认大小为 10,它会不断删除和添加要重复映射的值,“一旦达到此大小,新目标将触发旧目标的删除”,不时调用 GC。


0
投票

就我而言,是线程泄漏。写入 kafka 的线程开始增长“kafka-生产者-网络-线程”。因此,添加属性 spring.cloud.stream.source 或 spring.cloud.stream.output-bindings 会有所帮助。

我使用streamBridge发送。 springBoot 版本 2.7.14

© www.soinside.com 2019 - 2024. All rights reserved.