1、Unrecognized VM option 'UseCompressedOops'
问题:
执行
bin/kafka-server-start.sh config/server.properties
会报:
Unrecognized VM option 'UseCompressedOops' Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit.
原因:
是jdk的版本不匹配,需要修改一下配置文件
解决:
修改kafka的server.xml文件,去掉这个配置
-XX:+UseCompressedOops
2、Broken pipe解决
问题:
在利用librdkafka同kafka broker通信过程中,当kafka broker意外退出时(如kill -9),librdkafka接口的sendmsg接口报出了“Program received signal SIGPIPE, Broken pipe.”
原因:
这个错误具有典型性,这个一般是由于向一个被破坏的socket连接或者pipe读写数据造成的,这种场景不会出现SIGPIPE信号,而是直接send,write,sendmsg等返回-1,同时errno会被设置成EPIPE。
解决:(这种解决方案是c代码的,java代码有待考证)
1、 client中忽略SIGPIPE信号
signal(SIGPIPE, SIG_IGN);
2、 阻止SIGPIPE信号
sigset_t set; sigemptyset(&set); sigaddset(&set, SIGPIPE); sigprocmask(SIG_BLOCK, &set, NULL);
3、为SIGPIPE添加信号处理函数,处理完程序继续执行
signal(SIGPIPE, pipesig_handler);
3、Unrecognized VM option '+UseCompressedOops' Could not create the Java virtual m
问题:
Unrecognized VM option '+UseCompressedOops' Could not create the Java virtual m……
原因:
开始以为是内存大小的问题, 后来发现不是,是JDK的问题, 我用的32位centos,jdk1.6_24, 换成JDK1.7依然报错。
解决:
查看
bin/kafka-run-class.sh
找到
if [ -z "$KAFKA_JVM_PERFORMANCE_OPTS" ]; then KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true" fi
去掉-XX:+UseCompressedOops
bin/kafka-server-start.sh config/server.properties &
启动成功
4、FATAL Fatal error during KafkaServer startup:java.lang.NumberFormatException
有同学在启动kafka的时候,报出了如下的错误:
[2016-08-08 02:48:34,521] FATAL Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer) java.lang.NumberFormatException: For input string: "docs" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:492) at java.lang.Integer.parseInt(Integer.java:527) at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:272) at scala.collection.immutable.StringOps.toInt(StringOps.scala:30) at kafka.log.Log$.parseTopicPartitionName(Log.scala:944) at kafka.log.LogManager$$anonfun$loadLogs$2$$anonfun$3$$anonfun$apply$10$$anonfun$apply$1.apply$mcV$sp(LogManager.scala:146) at kafka.utils.CoreUtils$$anon$1.run(CoreUtils.scala:60) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744)
错误原因分析:
从NumberFormatException可以知道这是一个常见的数字格式异常错误,那么究竟哪里数字格式异常了呢?
我们在报错的日志中可以发现这个信息
at kafka.log.Log$.parseTopicPartitionName
这是在解析partition的时候出错了啊。
我们知道:
partition是以文件的形式存储在文件系统中,比如,创建了一个名为page_visits的topic,其有5个partition,那么在Kafka的数据目录中(由配置文件中的log.dirs指定的)中就有这样5个目录: page_visits-0, page_visits-1,page_visits-2,page_visits-3,page_visits-4,其命名规则为<topic_name>-<partition_id>,里面存储的分别就是这5个partition的数据。
所以在启动的时候会parse partition文件,切割出文件名字的数字,比如1,2等而这里错误报出了 String “docs”,说明log.dirs所指定的目录下有非法文件。
解决办法:
查看配置文件后,发现自定义指定的log.dirs的文件路径里面有文件,而且不规范。重新创建一个新的文件夹,并且重新指定后即可。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于