Kafka java.net.SocketTimeoutException

手上有一个消费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的连接数是正常的,说明问题已经得到修复。

##########

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据