卡夫卡节点假死

  

一、前言

,,,,早上醒来打开微信,同事反馈卡夫卡集群从昨天凌晨开始写入频繁失败,赶紧打开电脑查看了卡夫卡集群的机器监控,日志信息,发现其中一个节点的集群负载从昨天凌晨突然掉下来了,和同事反馈的时间点大概一致,于是乎就登录服务器开始干活。

二、排错

1,查看机器监控,看是否能大概定位是哪个节点有异常

卡夫卡节点假死

2,根据机器监控大概定位到其中一个异常节点,登录服务器查看卡夫卡日志,发现有报错日志,并且日志就停留在这个这个时间点:

(2017 - 06 - 01,16:59:59,851],ERROR  Processor  got  uncaught 例外只(kafka.network.Processor)   java.lang.OutOfMemoryError: Direct  buffer 内存   ,,,,,,,at  java.nio.Bits.reserveMemory (Bits.java: 658)   ,,,,,,,at  java.nio.DirectByteBuffer灵活;init> (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,查看卡夫卡进程和监听端口情况,发现都正常,尼玛假死了

ps  -ef  | grep  kafka ,,,,,,, # #,查看卡夫卡的进程   netstat  -ntlp  | grep  9092,, 9092年# #卡夫卡的监听端口

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,重启后在观察该节点的卡夫卡日志,在一顿指数重建之后,上面的报错信息在疯狂的刷,最后谷歌一番,解决了该问题

三,解决方案:

/usr/地方/卡夫卡/binkafka-run-class。sh

去掉

- xx: + DisableExplicitGC

添加

- xx: MaxDirectMemorySize=512

在一次重启卡夫卡,问题解决。


PS:参考链接:http://ju.outofmemory.cn/entry/75905

卡夫卡节点假死