一次kafka堆积问题解决

我们从kafka获取数据,如下图,有两步,第一步是从dmq获取出来放到一个队列里;第二步是我们消费线程从队列里获取内容。

对第一步,业务作为dmq客户端,启动N个连接去连接dmq,连接数由配置项mq.consumer.connections指定,一般模块都没配置(目前小组内框架设置的默认值是2)
对第二步,消费线程数是由配置项 consumer.thread.num 决定(出现问题时为10)

    巡检时发现现网积压了2500万消息,每个消息体大小为1K。在现网随时jstack都可以看到消费线程是8-10个在处理消息,说明线程已经跑满了;

    每个线程处理消息时间为2-3ms,1秒可以处理300多个消息,10个线程上限是3000tps,2个节点大约可以处理6-7000,(从业务日志可以看到当时一秒可以处理3400)但是当时生产效率大约9000/s。于是修改现网配置中消费者线程数为50,重启后问题修复。

重启后观察日志,1秒可以处理5000,jstack查看线程可以发现50个线程在处理的有10-30个,也说明之前的线程太少,积压问题解决。

下一步,继续优化从kafka获取的线程数,让分区数 = 节点数*客户端连接数

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值