最近开发了一版kafka消费存redis的代码,部署到客户现场后发现经常跑着跑着cpu占用特别高,把代码里面所有数据库交互操作去除后依然还是会出现该问题。
2.1、微服务kafka配置问题:
(1)、最大拉取数过大,原先配置文件默认拉取5000条,而此次修改的的能耗计算在消费时做的操作变多,有可能出现超过自动提交时间还未处理完这次拉取数据的情况。
(2)请求超时时间与自动提交时间设为一样,因为问题(1)的原因,可能出现一次拉取处理时间达到自动提交时间还未处理完,消费者心跳过期,离开消费组从而失去该消费组消费数据的情况。也就是问题发现中服务可以正常访问但不进行消费的出现原因。
(3)spring.boot.kafka.concurrency配置,此配置是用来设置消费者的线程数,建议与当前topic的分区数保持一致。
2.2、代码问题:
(1)、查看linux线程后发现微服务仍在运行,但通过查看服务运行参数发现服务cpu占用率达到790%左右。通过脚本间隔20秒打印一次服务器cpu保存到位置,而后与微服务日志进行比对,发现每次代码每次报错时cpu均会达到95%以上,检查代码后发现kafka消费未进行异常捕获,解决了该报错同时加上异常捕获后服务器cpu占用有显著下降
(2)、在kaka处理逻辑中存在入库操作,且写在了遍历中,开发时预估此处触发的次数较少故未放于循环外,部署至现场后数据量较大时,会出现一次消费多次连接数据库,同时现场数据量过大,插入的表中数据量过大