首页 > 解决方案 > .NET Confluent Kafka 消费者内存泄漏

问题描述

当使用 Confluent Kafka .NET 库从 Kafka 消费时,我们看到了巨大的内存泄漏。

我注意到的一件事是代码在没有 using 语句的情况下使用:

while (true)
{
    if (_consumer.Consume(out Message<string, string> message, TimeSpan.FromMilliseconds(100)))
    {
        OnMessage(message);
    }
}

但是,该 while 循环在应用程序的整个生命周期内运行,因此 .Dispose() 无论如何都不会在消费时被调用。没有创建其他消费者实例。

由于库背后的代码是 C 语言,如果我们调用 GC.Collect(),库创建的对象会被清理,还是垃圾收集器无法控制的非托管代码?

其他任何可能导致泄漏的东西,是否需要在某些时期或类似的时间调用 consumer.Close() ?

标签: c#.netapache-kafkaconfluent-platform

解决方案


推荐阅读