You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建IgniteSinkConnector时出现NoClassDefFoundError问题求助

部署IgniteSinkConnector遇到NoClassDefFoundError问题

问题背景

尝试部署分布式IgniteSinkConnector失败,启动时抛出java.lang.NoClassDefFoundError: org/apache/ignite/internal/util/typedef/internal/A,该类已存在于插件目录的uberJar中的ignite-core-2.9.1.jar内。

API创建连接器的请求体

{
    "name": "ignite-connector",
    "config": {
        "connector.class": "org.apache.ignite.stream.kafka.connect.IgniteSinkConnector",
        "tasks.max": "2",
        "topics": "someTopic1",
        "cacheName": "myCache",
        "cacheAllowOverwrite": true,
        "igniteCfg":"/opt/ignite/examples/config/example-cache.xml"
    }
}

插件配置方式

  • 构建Ignite Kafka扩展的uber-jar,放入独立目录
  • 在connect-distributed.sh对应的.properties文件中配置该目录为插件路径
  • 通过systemd设置CLASSPATH:
    Environment=CLASSPATH=/opt/kafka/ignite-connector/*
    

完整错误日志

[2022-11-17 19:49:30,268] INFO [ignite-connector|worker] SinkConnectorConfig values:
        config.action.reload = restart
        connector.class = org.apache.ignite.stream.kafka.connect.IgniteSinkConnector
        errors.deadletterqueue.context.headers.enable = false
        errors.deadletterqueue.topic.name =
        errors.deadletterqueue.topic.replication.factor = 3
        errors.log.enable = false
        errors.log.include.messages = false
        errors.retry.delay.max.ms = 60000
        errors.retry.timeout = 0
        errors.tolerance = none
        header.converter = null
        key.converter = null
        name = ignite-connector
        predicates = []
        tasks.max = 2
        topics = [someTopic1]
        topics.regex =
        transforms = []
        value.converter = null
 (org.apache.kafka.connect.runtime.SinkConnectorConfig:376)
[2022-11-17 19:49:30,272] INFO [ignite-connector|worker] EnrichedConnectorConfig values:
        config.action.reload = restart
        connector.class = org.apache.ignite.stream.kafka.connect.IgniteSinkConnector
        errors.deadletterqueue.context.headers.enable = false
        errors.deadletterqueue.topic.name =
        errors.deadletterqueue.topic.replication.factor = 3
        errors.log.enable = false
        errors.log.include.messages = false
        errors.retry.delay.max.ms = 60000
        errors.retry.timeout = 0
        errors.tolerance = none
        header.converter = null
        key.converter = null
        name = ignite-connector
        predicates = []
        tasks.max = 2
        topics = [someTopic1]
        topics.regex =
        transforms = []
        value.converter = null
 (org.apache.kafka.connect.runtime.ConnectorConfig$EnrichedConnectorConfig:376)
[2022-11-17 19:49:30,276] INFO [ignite-connector|worker] Instantiated connector ignite-connector with version 3.3.1 of type class org.apache.ignite.stream.kafka.connect.IgniteSinkConnector (org.apache.kafka.connect.runtime.Worker:322)
[2022-11-17 19:49:30,276] INFO [ignite-connector|worker] Finished creating connector ignite-connector (org.apache.kafka.connect.runtime.Worker:347)
[2022-11-17 19:49:30,277] ERROR [ignite-connector|worker] WorkerConnector{id=ignite-connector} Error while starting connector (org.apache.kafka.connect.runtime.WorkerConnector:201)
java.lang.NoClassDefFoundError: org/apache/ignite/internal/util/typedef/internal/A
        at org.apache.ignite.stream.kafka.connect.IgniteSinkConnector.start(IgniteSinkConnector.java:55)
        at org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:193)
        at org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:218)
        at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:363)
        at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:346)
        at org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:146)
        at org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:123)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
[2022-11-17 19:49:30,277] INFO [Worker clientId=connect-1, groupId=connect-cluster] Finished starting connectors and tasks (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1687)
[2022-11-17 19:49:30,280] ERROR [ignite-connector|worker] [Worker clientId=connect-1, groupId=connect-cluster] Failed to start connector 'ignite-connector' (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1811)
org.apache.kafka.connect.errors.ConnectException: Failed to start connector: ignite-connector
        at org.apache.kafka.connect.runtime.distributed.DistributedHerder.lambda$startConnector$35(DistributedHerder.java:1782)
        at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:349)
        at org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:146)
        at org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:123)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: org.apache.kafka.connect.errors.ConnectException: Failed to transition connector ignite-connector to state STARTED
        ... 8 more
Caused by: java.lang.NoClassDefFoundError: org/apache/ignite/internal/util/typedef/internal/A
        at org.apache.ignite.stream.kafka.connect.IgniteSinkConnector.start(IgniteSinkConnector.java:55)
        at org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:193)
        at org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:218)
        at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:363)
        at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:346)
        ... 7 more

解决思路

  • 检查类加载隔离:Kafka Connect插件类加载器是隔离的,确保uber-jar中的ignite-core依赖没有被其他插件或Connect核心类加载器覆盖。可尝试将ignite-core-2.9.1.jar单独放入插件目录,或确认uber-jar是否正确打包所有内部类依赖。
  • 验证CLASSPATH有效性:通过ps命令查看Connect进程的环境变量,确认CLASSPATH是否正确传递。若systemd配置未生效,需重启systemd服务或检查配置优先级。
  • 版本兼容性校验:确认IgniteSinkConnector(3.3.1)与ignite-core(2.9.1)版本兼容。不同Ignite版本内部类结构可能变化,尝试使用与连接器版本匹配的ignite-core重新构建uber-jar。
  • 插件目录配置检查:确保connect-distributed.properties中的plugin.path正确指向插件目录,且目录权限允许Connect进程读取jar文件。
  • 确认类存在性:执行jar tf ignite-core-2.9.1.jar | grep "org/apache/ignite/internal/util/typedef/internal/A.class",验证该类确实存在于jar包中,排除打包遗漏问题。

内容的提问来源于stack exchange,提问作者inetphantom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 00:05:21