banzaicloud / koperator

Oh no! Yet another Apache Kafka operator for Kubernetes
Apache License 2.0
784 stars 195 forks source link

Java UnsupportedClassVersionError for CruiseControlMetricsReporter #431

Closed TritoXid closed 4 years ago

TritoXid commented 4 years ago

Describe the bug Kafka cluster pods crash after upgrade kafka-operator from v0.12.0 to v0.12.2.

Steps to reproduce the issue: After upgrade kafka-operator to lastest version, operator started with rolling update my kafka cluster. After init pod, kafka started shutting down with following error.

[2020-08-12 14:30:52,256] INFO [TransactionCoordinator id=0] Starting up. (kafka.coordinator.transaction.TransactionCoordinator)
[2020-08-12 14:30:52,258] INFO [Transaction Marker Channel Manager 0]: Starting (kafka.coordinator.transaction.TransactionMarkerChannelManager)
[2020-08-12 14:30:52,258] INFO [TransactionCoordinator id=0] Startup complete. (kafka.coordinator.transaction.TransactionCoordinator)
[2020-08-12 14:30:52,358] ERROR [KafkaServer id=0] Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
java.lang.UnsupportedClassVersionError: com/linkedin/kafka/cruisecontrol/metricsreporter/CruiseControlMetricsReporter has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.apache.kafka.common.utils.Utils.loadClass(Utils.java:348)
    at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:337)
    at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstances(AbstractConfig.java:423)
    at kafka.server.DynamicMetricsReporters.createReporters(DynamicBrokerConfig.scala:744)
    at kafka.server.DynamicMetricsReporters.<init>(DynamicBrokerConfig.scala:693)
    at kafka.server.DynamicBrokerConfig.addReconfigurables(DynamicBrokerConfig.scala:227)
    at kafka.server.KafkaServer.startup(KafkaServer.scala:318)
    at kafka.server.KafkaServerStartable.startup(KafkaServerStartable.scala:38)
    at kafka.Kafka$.main(Kafka.scala:84)
    at kafka.Kafka.main(Kafka.scala)
[2020-08-12 14:30:52,361] INFO [KafkaServer id=0] shutting down (kafka.server.KafkaServer)

Expected behavior My expectation was that kafka-cluster working correctly, without rolling upgrade. I did every steps wrote in Upgrade notes.

Additional context Used versions: kafka-operator: banzaicloud/kafka-operator:v0.12.2 kafka-cluster: wurstmeister/kafka:2.12-2.3.1

stoader commented 4 years ago

@TritoXid newer versions of kafka-operator uses Java11 based jmx-exporter to export Kafka metrics and that doesn't work with wurstmeister/kafka:2.12-2.3.1 which is still Java8.

You can either replace wurstmeister/kafka:2.12-2.3.1 with a kafka image which is Java11 based (e.g. banzaicloud/kafka:2.13-2.5.0-bzc.1) or update your KafkaCluster custom resource to use the old jmx-exporter which is Java8 based. For the later update the monitoringConfig section and to use the 0.12.0 version of jmx-javaagent and jmx_prometheus_javaagent as in https://github.com/banzaicloud/kafka-operator/blob/v0.12.1/config/samples/banzaicloud_v1beta1_kafkacluster.yaml#L439-L443