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

时间:2016-05-01 18:53:31

标签: jvm apache-kafka

我在远程服务器上安装了Kafka,当我尝试运行时

~/kafka/bin/zookeeper-server-start.sh ~/kafka/config/zookeeper.properties

我收到了错误

Unrecognized VM option 'PrintGCDateStamps'

kafka服务器无法启动。这不是在vm中运行,而是直接在Ubuntu Server 16.04上运行,并正确安装了Java。有什么方法可以简单地纠正吗?

8 个答案:

答案 0 :(得分:19)

实际上,Kafka适用于较新版本的Java。我遇到了同样的问题,并在kafka/bin/kafka-run-class.sh脚本中发现错误,其中Java版本被错误地解析。

这一行抓取了太多的版本字符串:

JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*"/\1/p')

这使得if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]]条件无法识别正确的Java版本,并添加了一些不受支持的GC选项。

将上面的行更改为此解决了我的问题:

JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([^.-]*).*/\1/p')

我已将此报告为卡夫卡的问题。问题可以在这里找到:https://issues.apache.org/jira/browse/KAFKA-6855

编辑:有一个承诺修复:https://github.com/apache/kafka/commit/e9f86c3085fa8b65e77072389e0dd147b744f117

答案 1 :(得分: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

答案 2 :(得分:1)

所以我找到了答案并希望发布,以防其他人遇到此问题。在底部的kafka / bin / kafka-run-class.sh中有一个部分说明

exec $JAVA $KAFKA_HEAP_OPTS $KAFKA_JVM_PERFORMANCE_OPTS $KAFKA_GC_LOG_OPTS $KAFKA_JMX_OPTS $KAFKA_LOG4J_OPTS -cp $CLASSPATH $KAFKA_OPTS "$@"

删除$ KAFKA_GC_LOG_OPTS选项。可能是一个黑客,但至少它让kafka zookeeper服务器启动!

答案 3 :(得分:1)

截至目前,Kafka的默认包在Java 9中存在错误。最简单的解决方案是回滚到java8。

sudo add-apt-repository ppa:webupd8team/java
sudo apt update; sudo apt install oracle-java8-installer
sudo apt install oracle-java8-set-default

答案 4 :(得分:0)

@Mitchell Tracy,我知道这是一个比较老的帖子,只是把它放在那里,如果有人遇到同样的问题,我会遇到同样的问题。

我有jdk-9(早期访问)指向我的$ java_home,我本身有各种错误,BottomNavigationView bottomNavigationView; bottomNavigationView = (BottomNavigationView)findViewById(R.id.bottom_navigation); bottomNavigationView.setSelectedItemId(R.id.item_4th); ,等等。

使用命令(sudo mv jdk1.8.0.jdk~ / Documents)将jdk-9从$ java_home中移开并重新启动终端,它就像一个魅力!我能够启动zookeeper-server-start和kafka。 我希望这会有所帮助。

答案 5 :(得分:0)

我正在使用Java 10和kafka_2.11-0.10.1.0,但遇到了同样的问题。我在kafka-run-class.sh中找不到JAVA_MAJOR_VERSION,因此我检查了该错误。它显示“无法识别的VM选项'PrintGCDateStamps'”,这意味着Java 10 GC相关的vm选项已更改,并且Kafka配置尚未与其兼容。 This也证实了我的想法。

因此,切换到Java版本<9是一种解决方案,但是如果您想继续使用新的Java版本,则可以删除指定的选项,而不是删除包含该参数的整行。我这样做了,然后“ PrintGCTimeStamps”成为一个问题。我也删除了。所以我结束了下面的行: KAFKA_GC_LOG_OPTS =“-Xloggc:$ LOG_DIR / $ GC_LOG_FILE_NAME -verbose:gc -XX:+ PrintGCDetails” 因此,这仍将打印GC详细信息,但不会指定时间戳。 Zookeeper启动没有任何问题!

答案 6 :(得分:0)

与其他答案一样-我使它可以在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上正常运行

答案 7 :(得分:0)

我使用的是 windows,所以我只运行 bat 文件而不是 shell 脚本