【问题标题】:Apache Kafka 2.12-1.1.0 not working with JDK -10.0.1Apache Kafka 2.12-1.1.0 不适用于 JDK -10.0.1
【发布时间】:2021-07-27 13:32:05
【问题描述】:

为什么 Apache Kafka 2.12-1.1.0 不能与 JDK 10.0.1 一起使用?

./bin/zookeeper-server-start.sh config/zookeeper.properties 
java version "10.0.1" 2018-04-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)
/..../kafka_2.12-1.1.0/bin/kafka-run-class.sh: line 252: [[: 10 2018-04-17: syntax error in expression (error token is "2018-04-17")
[0.000s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/..../kafka_2.12-1.1.0/bin/../logs/zookeeper-gc.log instead.
Unrecognized VM option 'PrintGCDateStamps'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

【问题讨论】:

标签: apache-kafka


【解决方案1】:

用下面的代码更改bin/kafka-run-class.sh 就很神奇:

在第 251 行

之前:

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

之后:

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

【讨论】:

  • 这应该是公认的答案。对我来说就像一个魅力!
【解决方案2】:

您可以从文件 kafka-run-class.sh 中删除用于 java 10 的有问题的日志记录选项 KAFKA_GC_LOG_OPTS

来自

KAFKA_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M "

KAFKA_GC_LOG_OPTS="-Xloggc:$LOG_DIR/$GC_LOG_FILE_NAME -verbose:gc -XX:+PrintGCDetails"

【讨论】:

    【解决方案3】:

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

    这一行解决了我的 openjdk 问题!

    这是您需要替换的 bin/kafka-run-class.sh 中的原始行:

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

    【讨论】:

      【解决方案4】:

      bin/kafka-run-class.sh 中用于识别 java 版本的正则表达式存在问题,尤其是在您使用 openjdk 时。

      您可以将bin/kafka-run-class.sh 中的line 255 替换为:

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

      https://github.com/apache/kafka/blob/trunk/bin/kafka-run-class.sh#L286

      【讨论】:

        【解决方案5】:

        以上所有答案都是从 shell 脚本的角度来看的。如果有人在 windows 机器上使用 bat 文件,下面的答案会有所帮助。

        Windows Bat 文件

        转到..\kafka_2.12-2.2.0\bin\windows 并搜索kafka-run-class.bat 文件

        转到第 158 行并设置 JDK 路径。

        IF ["%JAVA_HOME%"] EQU [""] (
            set JAVA=java
        ) ELSE (
            set JAVA="..\Java\jdk12\bin\java"
        )
        

        Shell 脚本

        转到..\kafka_2.12-2.2.0\bin\ 并搜索kafka-run-class.sh 文件。 然后搜索 $JAVA_HOME 并相应地更新您的 JDK 路径。

        if [ -z "$JAVA_HOME" ]; then
          JAVA="java"
        else
          JAVA="$JAVA_HOME\java"
        fi
        
        JAVA = "../Java/jdk12/bin/java"
        echo $JAVA
        

        我认为这将解决问题。当我们在我们的机器上安装了多个 JDK 并想要测试这些东西时,就会发生这种情况。

        【讨论】:

          【解决方案6】:

          我从 line 314

          中删除了 PrintGCDateStamps,UseGCLogFileRotation 等标签

          【讨论】:

            猜你喜欢
            • 2018-10-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-11-14
            相关资源
            最近更新 更多