c# - .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() ?
解决方案
推荐阅读
- if-statement - 如何在 COGNOS 中使用 IF 和 CAST 函数?
- django - GeoDjango + PostGIS:纯几何 SRID
- r - dplyr 列联表中的准确比例
- python - Scipy sigmoid 曲线拟合
- c++ - C ++单例继承问题
- drupal - 将旧网站的数据导入具有不同架构的新 drupal 网站
- flutter - 如何使用 Flutter 创建 _showMenu 函数,该函数动态构建弹出菜单并允许处理选定的选项
- wordpress - 如何在WordPress的静态页面中按类别显示帖子
- node.js - 离子文件传输太大?
- pandas - Pandas Group By + Cumsum 分类变量