Kafka无法识别的VM选项'PrintGCDateStamps'

Mit*_*acy 16 jvm apache-kafka

我在远程服务器上安装了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

  • 这次真是万分感谢。效果很好:) (2认同)

小智 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)

  • 删除了我对这个答案的支持。谢谢! (2认同)

DMi*_*Min 5

就像其他答案一样——我让它在 Java 9 上工作。必须进行以下更改:

  1. 编辑文件bin/kafka-run-class.sh

  2. 在文件末尾附近(第 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

  1. 删除 2 个标志 :-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps并保存文件。

  2. Kafka 在 Java 9 上应该可以正常启动