繁体   English   中英

卡夫卡堆外内存泄漏

[英]Kafka off-heap memory leak

我很难弄清是什么原因导致kafka内存泄漏。

scala_version: kafka_2.11
kafka_version: 0.10.2.1

我有大约4GB的内存。 这是超过1个月的服务器内存的样子: 卡夫卡内存泄漏

我知道这是卡夫卡吞噬RAM,因为只要重新启动它,使用率就会下降。

从最高点到不断增长的Java进程常驻内存的输出:

PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
23758 kafka     20   0 7673740 1.326g   7992 S 59.5 36.7   6379:29 java
one month later:
23758 kafka     20   0 8756340 2.288g   3736 S 41.9 63.3  45498:06 java

这是堆的样子: 卡夫卡堆内存

这里的一切看起来都很好。 因此,泄漏必须不在堆上。

我已经看到了: https : //blog.heroku.com/fixing-kafka-memory-leak,但是它是指旧版本,因此应该长期解决

然后我发现了这一点:[KAFKA-4741]-RecordAccumulator.append中的内存泄漏,但似乎与Producer代码有关,并且我在tigase VM上看到了泄漏。

这是我产生消息的方式:

String topicName = getTopicName(packet.getElement());
kafkaProducer.send(
    new ProducerRecord<>(
        "dispatch." + topicName, 
        (int) (long) fromUser.getShardId(), // specifies the exact partition that receives the message
        fromUser.getSiteId() + ":" + fromUser.getDeviceId(),
        packet.getElement().toString()
    ),
    producerCallback
);
if (log.isLoggable(Level.FINE)) {
    log.log(Level.FINE, "Adding packet to kafka");
}

我怀疑可能是某些特定的配置引起了问题,尽管我大多数情况下都使用默认值。

然后,在消费者上我看到:

%3|1503392176.789|FAIL|rdkafka#producer-2| kafka02:9092/1: Receive failed: Disconnected
%3|1503392176.789|ERROR|rdkafka#producer-2| kafka02:9092/1: Receive failed: Disconnected
%3|1503392176.854|FAIL|rdkafka#consumer-1| kafka01:9092/0: Receive failed: Disconnected
%3|1503392176.854|ERROR|rdkafka#consumer-1| kafka01:9092/0: Receive failed: Disconnected

我将进行一些实验,以确定泄漏是由生产还是消耗引起的。 还将更新我用于消费v0.9.3-> v0.9.5的librdkafka

如果可以解决问题,我将在此处发布更新。 同时,我希望也许有人遇到类似的问题,并且可以指出正确的方向。

更新#1:

我做了几件事:

  • 虚拟机上的RAM量增加了一倍。
  • 升级到kafka 0.11.0.2

它仍然在泄漏,但是现在已经不再是一个问题了:

在此处输入图片说明

更新#2:

在生产者配置中启用压缩后,可以进一步减少内存泄漏。

生产者压缩后

我不知道该怎么做。 内存泄漏似乎取决于要写入存储的数据量。

可能的候选人:

[KAFKA-6529]-客户端突然断开连接后,代理会泄漏内存和文件描述符

[KAFKA-6185]-在向下转换的情况下,发生OOM的选择器内存泄漏的可能性很高

我将升级到版本1.1.0,然后发布另一个更新。

这个问题已在kafka_2.11-1.0.1中解决。

卡夫卡内存1.0.1

也不确定是否相关,但是我没有意识到至少需要3个kafka节点才能进行生产。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM