[
https://issues.apache.org/jira/browse/KAFKA-18337?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
MaoWei Tian updated KAFKA-18337:
--------------------------------
Description:
Hello!
If I use a Callback in the KafkaProducer.send() to call the
KafkaProducer.close(), the metrics will not be completely cleaned up.
{code:java}
//代码占位符
producer.send((new ProducerRecord<>("topic", "message test")),
new Callback() {
@Override
public void onCompletion(RecordMetadata metadata, Exception
exception) {
producer.close();
}
}); {code}
Using this code to close the KafkaProducer can cause the
AppInfoParser.unregisterAppInfo(JMX_PREFIX, clientId, metrics); within
KafkaProducer.close() to execute before the client.close() in Sender.run().
This leads to {{client.close()}} eventually calling
{{{}JmxReporter.reregister(){}}}, which prevents the metrics from being
completely cleaned up
!image-2024-12-21-15-52-39-930.png!
The RecordAccumulator is utilized by metrics in JMX and cannot be garbage
collected, ultimately leading to a memory leak。
was:
Hello!
If I use a Callback in the KafkaProducer.send() to call the
KafkaProducer.close(), the metrics will not be completely cleaned up.
{code:java}
//代码占位符
producer.send((new ProducerRecord<>("topic", "message test")),
new Callback() {
@Override
public void onCompletion(RecordMetadata metadata, Exception
exception) {
producer.close();
}
}); {code}
Using this code to close the KafkaProducer can cause the
AppInfoParser.unregisterAppInfo(JMX_PREFIX, clientId, metrics); within
KafkaProducer.close() to execute before the client.close() in Sender.run().
This leads to {{client.close()}} eventually calling
{{{}JmxReporter.reregister(){}}}, which prevents the metrics from being
completely cleaned up
!image-2024-12-21-15-52-39-930.png!
The RecordAccumulator is utilized by JMX and cannot be garbage collected,
ultimately leading to a memory leak。
> KafkaProducer Memory Leak in JMX Reporter
> -----------------------------------------
>
> Key: KAFKA-18337
> URL: https://issues.apache.org/jira/browse/KAFKA-18337
> Project: Kafka
> Issue Type: Bug
> Components: clients
> Reporter: MaoWei Tian
> Priority: Major
> Attachments: image-2024-12-21-15-52-39-930.png
>
>
> Hello!
> If I use a Callback in the KafkaProducer.send() to call the
> KafkaProducer.close(), the metrics will not be completely cleaned up.
> {code:java}
> //代码占位符
> producer.send((new ProducerRecord<>("topic", "message test")),
> new Callback() {
> @Override
> public void onCompletion(RecordMetadata metadata, Exception
> exception) {
> producer.close();
> }
> }); {code}
> Using this code to close the KafkaProducer can cause the
> AppInfoParser.unregisterAppInfo(JMX_PREFIX, clientId, metrics); within
> KafkaProducer.close() to execute before the client.close() in Sender.run().
> This leads to {{client.close()}} eventually calling
> {{{}JmxReporter.reregister(){}}}, which prevents the metrics from being
> completely cleaned up
> !image-2024-12-21-15-52-39-930.png!
>
>
> The RecordAccumulator is utilized by metrics in JMX and cannot be garbage
> collected, ultimately leading to a memory leak。
--
This message was sent by Atlassian Jira
(v8.20.10#820010)