使用 confluent-kafka-go 运行一段时间后内存越来越大的问题

先说个我的应用场景,在入口处初始化了producer,后面一直在复用这个连接,并且是一个任务脚本,一直在跑,环境centos8

问题:服务器内存不断上涨

一开始以为是协程环境没有正常退出导致资源不能释放,后来使用pprof也没有发现游有用的信息,但是看到newProducer的时候有一段代码没看懂

 总觉得是在这里出的问题,后来继续往下追

在看到这里的时候,我觉得差不多应该是发现问题了,然后我全局搜索这个chan是否有被消费,事实证明并没有,OK,试一下,把这个chan关掉,由于上面的if判断了一个fwDr,找到这个值,设置为false

 这里就是,传参的时候设置为false,等待验证

最终确实是我想的那样,设置为false后内存一直是正常了

当然问题是解决了,但是原理呢,其实在启动生产者的时候就初始化了一个goroutine,然后一直在监听各种事件,在没有任何动作消费的时候,内存不会变化,但是当有动作时,一旦匹配到对应的类型后,就会执行相应的动作,这里就是有消息要进行消费时,就会往这个chan里放数据

为什么会是这样呢,后来查看produce的描述,看到这里是异步的,需要用户自己从event事件中取结果,默认这个缓冲区是1000000,挺大的是吧,如果不取那么就会一直往里写,直到服务器内存撑爆,或者缓冲区的达到限定值,直接阻塞,当然它还提供了其他的生产方式,可以参考他的producer_test.go文件

吐槽一下:虽然问题很简单,但是排查的过程很难受,去了他的github上,根本找不到这个参数的说明跟配置(也可能是我没找到,有找到的同学,记得评论一下,或者私信我一下),没办法,官网不说,只能自己搞

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值