2023年一月份新年放假前一周合作客户某征信行出现请求hbase平均耗时300ms,出现大量请求hbase超时,接口是客户对外提供实时服务的,对于这样的情况客户是不能接受的。现场的同事需要我们支持下,出差客户公司。
首先了解下集群最近是否调用量增多,查看监控请求是平时的几倍,了解是些大机构在调,最近hbase集群数据刚更新,切换到备集群服务。现在请求量一上来hbase备集群完全不能提供服务,主集群提供服务也会出现请求量上来大量超时。
数据更新刚好一周,怀疑是不是major合并造成的,查看hbase日志有major日志,系统负载正常,hbase日志连warn日志都没有,观察了一段时间请求还是超时。查看hbase监控读请求量几十万,而在hbase master ui上请求量只有几千,分配也不均衡大部分分布在hbase:meta所在服务器上,查看应用请求错误日志,发现错误堆栈是在做scan,抛出异常代码为判断表是否存在tableExists。hbase查询数据是先要查询hbase:meta表的获取数据所在regionserver 和region信息,一般hbase client创建连接几个请求下来hbase:meta都会缓存到本地不会频繁的去scan hbase:meta。hbase client 判断表是否存在里会每次都scan hbase:meta表来判断表是否存在。修改程序代码去掉每次请求都判断表是否存在,重新上线恢复正常。hbase 耗时平均耗时20ms