kafka实战总结(二)
2019-01-02 本文已影响0人
阔阔飞翔
紧接着实战总结(一)中存在的问题


一、由于消费者处理速度慢,一条数据过来后,入库很慢,造成延时,这里我采取的方案是使用多线程来加快处理速度。开始我使用定长线程池fixedThreadPool,个数是10个,部署到服务器上跑了一天,发现服务器cpu爆满,开始查原因,原来是定长线程池fixedThreadPool中使用的是LinkedBlockingQueue这个队列,这个队列如果没有没有指定长度,那么它是个无界队列,如果指定长度,那就是个有界队列。定长线程池fixedThreadPool中使用时就没有指定长度,网上说是因为线程不释放造成cpu爆满,采取的方案是自定义线程池,如上图所示,线程池长度是10,队列长度是10万。部署到服务器跑了一天,发现还是延时了,查资料,有的说是因为数据库连接关闭次数太多导致IO访问次数太频繁,有的说要批量插入,但都不符合我们的场景。这里我增加了线程数到50个,部署到服务器跑了四天,并未延时。后面需要再调调线程数看看,会不会延时。
二、实战总结(一)中使用手动提交(Acknowledgment),使用多线程处理时发现ack确认提交时很慢,无法达到我想要的效果,所以这里采用了自动提交,因为多线程处理,处理很快,也就不会造成数据重复