Translated by ChatGPT
I'm encountering an error while trying to run a Kafka Connect JDBC Source Connector task(connect-standalone). The error stack trace shows an IllegalAccessError when Kafka Connect attempts to instantiate the JdbcSourceTask class. The error message indicates that it is trying to access the class .apache.kafkamon.utils.SystemTime, but the class loader cannot access it.
Here's the relevant part of the error log:
[2024-11-15 17:29:25,300] ERROR [test-connector-mysql|task-0] Failed to start task test-connector-mysql-0 (.apache.kafka.connect.runtime.Worker:707)
.apache.kafka.connect.errors.ConnectException: Instantiation error
at .apache.kafka.connect.runtime.isolation.Plugins.newPlugin(Plugins.java:142)
at .apache.kafka.connect.runtime.isolation.Plugins.newTask(Plugins.java:340)
at .apache.kafka.connect.runtime.Worker.startTask(Worker.java:664)
at .apache.kafka.connect.runtime.Worker.startSourceTask(Worker.java:592)
at .apache.kafka.connect.runtime.standalone.StandaloneHerder.startTask(StandaloneHerder.java:504)
at .apache.kafka.connect.runtime.standalone.StandaloneHerder.createConnectorTasks(StandaloneHerder.java:488)
at .apache.kafka.connect.runtime.standalone.StandaloneHerder.createConnectorTasks(StandaloneHerder.java:482)
at .apache.kafka.connect.runtime.standalone.StandaloneHerder.updateConnectorTasks(StandaloneHerder.java:541)
at .apache.kafka.connect.runtime.standalone.StandaloneHerder.lambda$null$2(StandaloneHerder.java:255)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1575)
Caused by: .apache.kafkamon.KafkaException: Could not instantiate class io.confluent.connect.jdbc.source.JdbcSourceTask
at .apache.kafkamon.utils.Utils.newInstance(Utils.java:405)
at .apache.kafka.connect.runtime.isolation.Plugins.newPlugin(Plugins.java:140)
... 14 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:501)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:485)
at .apache.kafkamon.utils.Utils.newInstance(Utils.java:401)
... 15 more
Caused by: java.lang.IllegalAccessError: failed to access class .apache.kafkamon.utils.SystemTime from class io.confluent.connect.jdbc.source.JdbcSourceTask (.apache.kafkamon.utils.SystemTime is in unnamed module of loader 'app'; io.confluent.connect.jdbc.source.JdbcSourceTask is in unnamed module of loader .apache.kafka.connect.runtime.isolation.PluginClassLoader @63021689)
at io.confluent.connect.jdbc.source.JdbcSourceTask.<init>(JdbcSourceTask.java:78)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
... 18 more
connect-standalone.properties is almost default setting.
Here's the source.properties
name=connector-mysql
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
tasks.max=1
connection.url=jdbc:mysql://localhost:3306/{dbName}
connection.user=root
connection.password=xxx
table.whitelist=invoices
mode=incrementing
incrementing.column.name=id
topic.prefix=mysql_
Kafka: 3.9.0 (installed via Homebrew) MySQL: 8.0.35 Kafka-Connect-JDBC: 10.8.0 Mysql-Connector-j : 8.2.0 Java: 17 OS: macOS Sequoia 15.0.1 (M1pro) I've already configured the plugin.path to include the correct directories, but it seems like there's a class loader conflict between Kafka Connect's core libraries and the JDBC connector.
Has anyone encountered a similar issue or know how to resolve this? It seems like the PluginClassLoader is unable to access classes that are part of Kafka's core libraries. How can I fix this class loader issue to allow proper access between the connector and the core Kafka libraries?
I have tried Kafka Connect JDBC versions 10.4.x, 10.5.x, and 10.7.x, along with MySQL Connector/J versions 8.0.33 and 9.1.0, but the same issue persists.
Translated by ChatGPT
I'm encountering an error while trying to run a Kafka Connect JDBC Source Connector task(connect-standalone). The error stack trace shows an IllegalAccessError when Kafka Connect attempts to instantiate the JdbcSourceTask class. The error message indicates that it is trying to access the class .apache.kafkamon.utils.SystemTime, but the class loader cannot access it.
Here's the relevant part of the error log:
[2024-11-15 17:29:25,300] ERROR [test-connector-mysql|task-0] Failed to start task test-connector-mysql-0 (.apache.kafka.connect.runtime.Worker:707)
.apache.kafka.connect.errors.ConnectException: Instantiation error
at .apache.kafka.connect.runtime.isolation.Plugins.newPlugin(Plugins.java:142)
at .apache.kafka.connect.runtime.isolation.Plugins.newTask(Plugins.java:340)
at .apache.kafka.connect.runtime.Worker.startTask(Worker.java:664)
at .apache.kafka.connect.runtime.Worker.startSourceTask(Worker.java:592)
at .apache.kafka.connect.runtime.standalone.StandaloneHerder.startTask(StandaloneHerder.java:504)
at .apache.kafka.connect.runtime.standalone.StandaloneHerder.createConnectorTasks(StandaloneHerder.java:488)
at .apache.kafka.connect.runtime.standalone.StandaloneHerder.createConnectorTasks(StandaloneHerder.java:482)
at .apache.kafka.connect.runtime.standalone.StandaloneHerder.updateConnectorTasks(StandaloneHerder.java:541)
at .apache.kafka.connect.runtime.standalone.StandaloneHerder.lambda$null$2(StandaloneHerder.java:255)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1575)
Caused by: .apache.kafkamon.KafkaException: Could not instantiate class io.confluent.connect.jdbc.source.JdbcSourceTask
at .apache.kafkamon.utils.Utils.newInstance(Utils.java:405)
at .apache.kafka.connect.runtime.isolation.Plugins.newPlugin(Plugins.java:140)
... 14 more
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:74)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:501)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:485)
at .apache.kafkamon.utils.Utils.newInstance(Utils.java:401)
... 15 more
Caused by: java.lang.IllegalAccessError: failed to access class .apache.kafkamon.utils.SystemTime from class io.confluent.connect.jdbc.source.JdbcSourceTask (.apache.kafkamon.utils.SystemTime is in unnamed module of loader 'app'; io.confluent.connect.jdbc.source.JdbcSourceTask is in unnamed module of loader .apache.kafka.connect.runtime.isolation.PluginClassLoader @63021689)
at io.confluent.connect.jdbc.source.JdbcSourceTask.<init>(JdbcSourceTask.java:78)
at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:62)
... 18 more
connect-standalone.properties is almost default setting.
Here's the source.properties
name=connector-mysql
connector.class=io.confluent.connect.jdbc.JdbcSourceConnector
tasks.max=1
connection.url=jdbc:mysql://localhost:3306/{dbName}
connection.user=root
connection.password=xxx
table.whitelist=invoices
mode=incrementing
incrementing.column.name=id
topic.prefix=mysql_
Kafka: 3.9.0 (installed via Homebrew) MySQL: 8.0.35 Kafka-Connect-JDBC: 10.8.0 Mysql-Connector-j : 8.2.0 Java: 17 OS: macOS Sequoia 15.0.1 (M1pro) I've already configured the plugin.path to include the correct directories, but it seems like there's a class loader conflict between Kafka Connect's core libraries and the JDBC connector.
Has anyone encountered a similar issue or know how to resolve this? It seems like the PluginClassLoader is unable to access classes that are part of Kafka's core libraries. How can I fix this class loader issue to allow proper access between the connector and the core Kafka libraries?
I have tried Kafka Connect JDBC versions 10.4.x, 10.5.x, and 10.7.x, along with MySQL Connector/J versions 8.0.33 and 9.1.0, but the same issue persists.
Share Improve this question edited Nov 30, 2024 at 4:37 OneCricketeer 192k20 gold badges143 silver badges268 bronze badges asked Nov 15, 2024 at 19:09 murmugmurmug 711 silver badge5 bronze badges1 Answer
Reset to default 5Self answer!
The issue was resolved by downgrading Kafka to version 3.8.x
. According to the release notes for Kafka 3.9.0
, the SystemTime
class was changed to a singleton, and instead of creating an instance with new SystemTime();
, it was modified to obtain the instance by calling the SystemTime.getSystemTime();
method.
However, the latest version of Kafka Connect JDBC(v10.8.0
) initializes the field with time = new SystemTime();
, which caused the error.
I have created an issue on the Kafka Connect JDBC GitHub.
Here are the relevant links:
https://issues.apache./jira/browse/KAFKA-16879
https://github/apache/kafka/pull/16266
https://github/apache/kafka/blob/trunk/clients/src/main/java//apache/kafka/common/utils/SystemTime.java
https://github/confluentinc/kafka-connect-jdbc/blob/master/src/main/java/io/confluent/connect/jdbc/source/JdbcSourceTask.java