我在远程服务器上安装了Kafka,当我尝试运行时
~/kafka/bin/zookeeper-server-start.sh ~/kafka/config/zookeeper.properties
我收到了错误
Unrecognized VM option 'PrintGCDateStamps'
kafka服务器无法启动。这不是在vm中运行,而是直接在Ubuntu Server 16.04上运行,并正确安装了Java。有什么方法可以简单地纠正吗?
答案 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)
我有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上工作。必须进行以下更改:
编辑文件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上正常运行
答案 7 :(得分:0)
我使用的是 windows,所以我只运行 bat 文件而不是 shell 脚本