最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

kafka mysql source connect errorKafka Connect JDBC Source Connector Fails to Start: IllegalAccessError due to ClassLoader Issue

programmeradmin0浏览0评论

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 badges
Add a comment  | 

1 Answer 1

Reset to default 5

Self 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

发布评论

评论列表(0)

  1. 暂无评论