手上有一个消费Kafka的服务,这个服务每隔一段时间使用SimpleConsumer从kafka集群获取数据。Kafka的版本是0.8.21。今天这个服务一直在报错:SocketTimeoutException。异常信息如下: 从异常信息上来看是网络连接超时。翻看了一下任务的运行日志发现是在连接Kafka集群的k3节点时出的错。 尝试telnet连接k3节点的broker是可以的。这样子还报错就比较奇怪了。 使用glances查看了一下消费节点的本地运行环境,发现各项指标也都挺正常的。 登录到k3节点,查看kafka的运行日志也能够看到消费节点的连接记录: 查看了一下使用high-level consumer的其他服务也是正常的。 百思不得其解。但是问题还得解决,随手查看了一下k3节点的句柄数,发现一个进程的句柄数高得有点儿离谱哎: k3节点每个进程可以打开的最大句柄数: 53466就是k3节点上的kafka broker进程: 此时有必要看下这个进程的网络连接了: 发现有大量的CLOSE_WAIT和TIME_WAIT连接: 统计了下CLOSE_WAIT和TIME_WAIT连接的数量,好像有点儿多: 可以看出来所有连接中CLOSE_WAIT的记录占了绝大部分,和CLOSE_WAIT相关的连接又多是在j0节点上。 到j0节点查找和端口51436相关的进程,发现是一个kafka-manager服务。不是生产服务,直接关掉了事。 回到k3节点,重启该节点的broker。再进行测试,异常消失。持续观察几天,kafka的连接数是正常的,说明问题已经得到修复。 ##########
[阅读更多...]