我在远程服务器上安装了Kafka,当我试图运行时
~/kafka/bin/zookeeper-server-start.sh ~/kafka/config/zookeeper.properties
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误
Unrecognized VM option 'PrintGCDateStamps'
Run Code Online (Sandbox Code Playgroud)
并且kafka服务器无法启动.这不是在vm中运行,而是直接在Ubuntu Server 16.04上运行,并正确安装了Java.有什么办法可以简单地纠正吗?
And*_*lad 20
实际上,Kafka适用于较新版本的Java.我遇到了同样的问题,并在kafka/bin/kafka-run-class.sh脚本中发现错误,其中Java版本被错误地解析.
这行抓取了太多的版本字符串:
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"/\1/p')
Run Code Online (Sandbox Code Playgroud)
这使得if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]]条件无法识别正确的Java版本,并添加了一些不受支持的GC选项.
将上面的行更改为此解决了我的问题:
JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*/\1/p')
Run Code Online (Sandbox Code Playgroud)
我已将此报告为卡夫卡的一个问题.这个问题可以在这里找到:https://issues.apache.org/jira/browse/KAFKA-6855
编辑:有一个承诺修复此问题:https://github.com/apache/kafka/commit/e9f86c3085fa8b65e77072389e0dd147b744f117
小智 10
在安装了oracle jdk 9的Ubuntu 16.04上也出现同样的问题,我也试过openjdk 1.9并得到了同样的错误.但是当我尝试其他版本的jdk时,我发现oracle jdk 8和openjdk 1.8都可以.
所以,只需查看您正在使用的java版本,也许您可以通过以下方式安装或切换到其他版本的jdk:
update-alternatives --display java
update-alternatives --config java
java -version
Run Code Online (Sandbox Code Playgroud)
就像其他答案一样——我让它在 Java 9 上工作。必须进行以下更改:
编辑文件bin/kafka-run-class.sh
在文件末尾附近(第 248 行左右)找到以下块:
if [ "x$GC_LOG_ENABLED" = "xtrue" ]; then
GC_LOG_FILE_NAME=$DAEMON_NAME$GC_FILE_SUFFIX
KAFKA_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps "
fi
删除 2 个标志 :-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps并保存文件。
Kafka 在 Java 9 上应该可以正常启动