首页 > 解决方案 > 微服务中 Kafka 生产者导致的大 GC 暂停

问题描述

我的一个 Web 服务为每个在线请求向 kafka(版本:0.10.2.1)发送日志消息(大小:10K),我发现 KafkaProducer 消耗大量内存,导致 gc 暂停时间过长。我的服务只有一个Kafka生产者,官方推荐的。

我只是想知道是否有人对如何在不影响在线服务的情况下向 kafka 发送消息有任何建议?

标签: javaperformanceapache-kafkagarbage-collectionkafka-producer-api

解决方案


听起来生产者无法跟上您的服务生成日志的速度。(这必然是推测,因为您提供了有关您的设置的最少细节)。

您是否对您的 kafka 集群进行了基准测试?它是否能够承受您产生的那种负载?

另一种方法是将您的 kafka 生产者与您的实际服务脱钩。由于您正在处理日志消息,因此您的应用程序可以简单地将日志写入磁盘,并且您可以有一个单独的进程读取这些日志文件并将它们发送到 kafka。这样消息的产生不会影响您的主要服务。

您甚至可以让 kafka 生产者完全在不同的 VM/Container 上运行,并通过 NFS 挂载之类的方式读取日志。


推荐阅读