一、前言
早上醒来打开微信,同事反馈kafka集群从昨天凌晨开始写入频繁失败,赶紧打开电脑查看了kafka集群的机器监控,日志信息,发现其中一个节点的集群负载从昨天凌晨突然掉下来了,和同事反馈的时间点大概一致,于是乎就登录服务器开始干活。
二、排错
1、查看机器监控,看是否能大概定位是哪个节点有异常
技术分享
2、根据机器监控大概定位到其中一个异常节点,登录服务器查看kafka日志,发现有报错日志,并且日志就停留在这个这个时间点:
[2017-06-01 16:59:59,851] error processor got uncaught exception. (kafka.network.processor)
java.lang.outofmemoryerror: direct buffer memory
at java.nio.bits.reservememory(bits.java:658)
at java.nio.directbytebuffer.(directbytebuffer.java:123)
at java.nio.bytebuffer.allocatedirect(bytebuffer.java:306)
at sun.nio.ch.util.gettemporarydirectbuffer(util.java:174)
at sun.nio.ch.ioutil.read(ioutil.java:195)
at sun.nio.ch.socketchannelimpl.read(socketchannelimpl.java:379)
at org.apache.kafka.common.network.plaintexttransportlayer.read(plaintexttransportlayer.java:108)
at org.apache.kafka.common.network.networkreceive.readfromreadablechannel(networkreceive.java:97)
at org.apache.kafka.common.network.networkreceive.readfrom(networkreceive.java:71)
at org.apache.kafka.common.network.kafkachannel.receive(kafkachannel.java:160)
at org.apache.kafka.common.network.kafkachannel.read(kafkachannel.java:141)
at org.apache.kafka.common.network.selector.poll(selector.java:286)
at kafka.network.processor.run(socketserver.scala:413)3、查看kafka进程和监听端口情况,发现都正常,尼玛假死了
ps -ef |grep kafka ## 查看kafka的进程
netstat -ntlp |grep 9092 ##9092kafka的监听端口4、既然已经假死了,只能重启了
ps -ef |grep kafka |grep -v grep |awk ‘{print $2}‘ | xargs kill -9
/usr/local/kafka/bin;nohup ./kafka-server-start.sh ../config/server.properties &5、重启后在观察该节点的kafka日志,在一顿index重建之后,上面的报错信息在疯狂的刷,最后谷歌一番,解决了该问题
三、凯发天生赢家一触即发官网的解决方案:
在
/usr/local/kafka/binkafka-run-class.sh去掉
-xx: disableexplicitgc添加
-xx:maxdirectmemorysize=512m在一次重启kafka,问题解决。