Christofer Dutz created KAFKA-19007: ---------------------------------------
Summary: Issues running the apache/kafka docker container on M4 Macs with OS >= 15.2 Key: KAFKA-19007 URL: https://issues.apache.org/jira/browse/KAFKA-19007 Project: Kafka Issue Type: Bug Components: docker Affects Versions: 3.9.0 Reporter: Christofer Dutz It seems there's an odd issue running java inside docker containers running on MacOS systems with an M4 chip and using an OS version that's 15.2 or greater. In this case the JVM simply dies with a core-dump. This can be avoided, by passing "-XX:UseSVE=0" to the jvm, which can be done by setting KAFKA_OPTS="-XX:UserSVE=0". However, this doesn't completely seem to work. I was using TestContainers to start Kafka in docker, and inside the container the file: /opt/kafka/bin/kafka-run-class.sh contains this block of code: {code:java} if [ "x$GC_LOG_ENABLED" = "xtrue" ]; then GC_LOG_FILE_NAME=$DAEMON_NAME$GC_FILE_SUFFIX # The first segment of the version number, which is '1' for releases before Java 9 # it then becomes '9', '10', ... # Some examples of the first line of `java --version`: # 8 -> java version "1.8.0_152" # 9.0.4 -> java version "9.0.4" # 10 -> java version "10" 2018-03-20 # 10.0.1 -> java version "10.0.1" 2018-04-17 # We need to match to the end of the line to prevent sed from printing the characters that do not match JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p') if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then KAFKA_GC_LOG_OPTS="-Xlog:gc*:file=$LOG_DIR/$GC_LOG_FILE_NAME:time,tags:filecount=10,filesize=100M" else 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" fi fi {code} On these systems, the execution of: {code:java} JAVA_MAJOR_VERSION=$("$JAVA" -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p') {code} Results in the JAVA_MAJOR_VERSION being set to the value "Aborted", which makes the if statement go into the else branch. This then sets PrintGCDateStamps, which makes the JVM die with an error message. Currently I have noticed that on these systems using the apache/kafka-native image seems to work around the issue. -- This message was sent by Atlassian Jira (v8.20.10#820010)