一次golang sarama kafka内存占用大的排查经历

Python018

一次golang sarama kafka内存占用大的排查经历,第1张

环境:

现象:golang微服务内存占用超过1G,查看日志发现大量kafka相关错误日志,继而查看kafka集群,其中一个kafka节点容器挂掉了。

疑问 为什么kafka集群只有一个broker挂了,客户端就大量报错呢

通过beego admin页面获取 mem-1.memprof

可以看到调用栈为 withRecover > backgroundMetadataUpdataer > refreshMeaatdata > RefreshMetada > tryRefreshMetadata >...

sarama-cluster: NewClient

为什么kafka集群只有一个broker,但是NewClient确失败了?

在kafka容器里查看topic, 发现Replicas和Isr只有一个,找到kafka官方配置说明,自动生成的topic需要配置default.replication.factor这个参数,才会生成3副本。

本文主要研究一下golang的zap的ZapKafkaWriter

WriteSyncer内嵌了io.Writer接口,定义了Sync方法;Sink接口内嵌了zapcore.WriteSyncer及io.Closer接口;ZapKafkaWriter实现Sink接口及zapcore.WriteSyncer接口,其Write方法直接将data通过kafka发送出去。