Kafka自动宕机问题
本博客主要解决的是在运行flink程序时,Kafka在启动几秒后出现自动宕机的问题,从运行程序的情况下,主要有两个方面的问题和解决措施。
1.log日志所在内存满
在运行flink程序时,Kafka产生数据会生成两个日志目录,一个生成在Kafka目录下的log目录用来存储日志信息,一个在/config/server.properties配置文件中设置的log.dirs,为存放数据的日志。
由于运行flink程序,在不间断的产生数据,很容易造成分区内存满,导致Kafka崩溃。因此需要把目录改为内存较大的分区,并经常删除日志。
这里介绍一个简单的方法,就是为当前的用户空间创建软链接,使之指向较大的分区,逻辑上存储目录仍是当前空间,但物理上是存储在一个较大的空间。
2.jre内存满
当没有出现第一个问题时,查看Kafka日志发现报jre内存满的问题。最后发现是程序运行过程中产生的topic一直没有删除,导致内存满,进而Kafka崩溃。主要分以下几个步骤解决:(当然需要把程序都停下来)
第一:
进入到/config/server.properties,设置
delete.topic.enable=true
如果本步骤没有设置,则调用Kafka的delete删除命令将无法真正将topic删除,而是显示marked for deletion
第二:
调用命令删除topic:
./bin/kafka-topics --delete --zookeeper 【zookeeper server:port】 --topic 【topic name】
这个需要根据topic的名字删除。
第三:
如果前两步还是解决不了问题,则需要通过zookeeper彻底删除topic,先把zookeeper启动起来,然后找到topic所在目录,删除topic。
(1)登录ZK shell
bash bin/zkClish -server ip:port
输入你的IP地址和端口号
(2)找到topic所在目录
ls /brokers/topics
(3)删除topic
rmr /brokers/topics/[topic name]
一个一个按topic名字删除较为麻烦,可以直接把所在目录删除
(4)删除标记的topic
如果topic被标记为marked for deletion 通过
ls /admin/delete_topics/【topic name】
删除topic
rmr /admin/delete_topics/【topic name】
(5)查看是否删除
./bin/kafka-topics.sh --list --zookeeper 【zookeeper server:port】
最后,重启zookeeper,Kafka即可。
在Hibench下运行flink程序,主要出现问题的地方基本都是Kafka引起的,可是困扰我们好久,希望以后的同学再遇到相似问题可以方便解决。