合流Kafka Go客户端内存泄漏

tquggr8v  于 2022-10-07  发布在  Kafka
关注(0)|答案(1)|浏览(242)

我的服务消费来自一个Kafka主题的消息。当使用者空闲并被阻塞等待消息时,我看到POD内存持续线性增加。Go pprof证明GO内存消耗在40MB左右是恒定的,同时POD指标显示GO内存消耗超过100MB。

这导致我得出这样的结论:正如这里提到的https://zendesk.engineering/hunting-down-a-c-memory-leak-in-a-go-program-2d08b24b617d一样,C库中的内存被消耗了

上面链接中的Librdkafka中内存消耗的解决方案是消费Librdkafka产生的OffsetCommittee Response事件。以下是链接中的引语:
结果是,Librdkafka在每次从Kafka代理接收到OffsetCommittee Response时都会生成一个事件(在我们的自动提交间隔设置为5秒的情况下,这是非常常见的),并将其放入队列中以供我们的应用程序处理。然而,我们的应用程序实际上并没有处理该队列中的事件,因此该队列的大小无限制地增长

有谁知道如何在围棋中消费这些事件?遗憾的是,上面的链接没有提到解决方案

piv4azn7

piv4azn71#

我通过计算我的服务中使用的消息数解决了这个问题。当消费的消息数量达到配置的值时,例如在我的例子中为100,000,然后我只需关闭并重新创建Kafka消费者和生产者。

这个解决方案既不优雅,也不能解决原来的问题,但嘿,它稳定了我的生产。现在我有一条平坦的内存消耗曲线。

相关问题