一,问题描述

 

       今天上午时候,kafka的一个topic涌上来超过平常值的一堆数据,消费客户端就开始出现了几个明显的问题:

       1,首先是ZK连接超时

       2,CPU飙升到400%

       3,观察程序GC,发现老年代,S0,Eden这三个,100%;

       4,线程数目太多

 

二,问题分析

 

         在从kafka获取到数据之后,我使用了一个可回收线程池来进行存入hbase的操作,可回收线程池在使用时候,如果线程不够用,就会继续去创建线程,导致最后观察的时候,发现这个进程有2000多个线程在跑,线程之间的切换,是很耗费性能的,所以带来的CPU飙升,后来使用了固定大小的线程池,多开几个客户端取消费的方式,发现CPU降低下去了;随之下去的是GC情况,观察了几个钟头,始终没有发现FULL GC的情况。另外,在使用Kafka去拉取数据的时候,每次拉取完,使用Thread.sleep 0的方式,暂时让出CPU,不让这个获取数据的线程长期占用时间片;程序正常跑了之后,又回头想了想ZK连接超时的问题,感觉可能是FULL GC太频繁,每次都需要耗费很长的时间,导致了连接超时的问题;

 

 

 

 

 

 

 

 

       

 

 

 

 

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐