【问题标题】:Apache Ignite Connector - Giving NoClassDefFoundErrorApache Ignite 连接器 - 给出 NoClassDefFoundError
【发布时间】:2021-10-27 03:06:27
【问题描述】:

我正在尝试借助 Apache Ignite Sink 连接器将 kafka 主题数据加载到 ignite 缓存中。面临以下问题。所有需要的 jars 连同 ignite 配置 (xml) 文件都已就位。

我很不确定为什么它会为 IgniteSinkTask$StreamerContext$Holder 抛出 ConnectException 和 NoClassDefFoundException。由于某些原因,java 无法运行这些类。

public static class StreamerContext {
    private StreamerContext() {
    }

    public static Ignite getIgnite() {
        return IgniteSinkTask.StreamerContext.Holder.IGNITE;
    }

    public static IgniteDataStreamer getStreamer() {
        return IgniteSinkTask.StreamerContext.Holder.STREAMER;
    }

    private static class Holder {
        private static final Ignite IGNITE;
        private static final IgniteDataStreamer STREAMER;

        private Holder() {
        }

        static {
            IGNITE = Ignition.start(IgniteSinkTask.igniteConfigFile);
            STREAMER = IGNITE.dataStreamer(IgniteSinkTask.cacheName);
        }
    }
}

我该如何解决这个问题? 提前致谢。

[错误] 2021-08-27 06:13:58,827 [任务线程-IgniteSinkConnectorConnector_0-0] org.apache.kafka.connect.runtime.WorkerSinkTask deliverMessages - WorkerSinkTask{​id=IgniteSinkConnectorConnector_0-0}​ 任务抛出一个 未捕获且不可恢复的异常。任务正在被杀死并将 直到手动重新启动才能恢复。错误:无法初始化 班级 org.apache.ignite.stream.kafka.connect.IgniteSinkTask$StreamerContext$Holder java.lang.NoClassDefFoundError:无法初始化类 org.apache.ignite.stream.kafka.connect.IgniteSinkTask$StreamerContext$Holder 在 org.apache.ignite.stream.kafka.connect.IgniteSinkTask$StreamerContext.getStreamer(IgniteSinkTask.java:198) 在 org.apache.ignite.stream.kafka.connect.IgniteSinkTask.put(IgniteSinkTask.java:118) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:586) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:329) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:232) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:201) 在 org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:185) 在 org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:234) 在 java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834) [错误] 2021-08-27 06:13:58,828 [任务线程-IgniteSinkConnectorConnector_0-0] org.apache.kafka.connect.runtime.WorkerTask doRun - WorkerSinkTask{​id=IgniteSinkConnectorConnector_0-0}​ 任务抛出一个 未捕获且不可恢复的异常。任务正在被杀死并将 直到手动重新启动才能恢复 org.apache.kafka.connect.errors.ConnectException:退出 WorkerSinkTask 由于不可恢复的异常。在 org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:614) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:329) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:232) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:201) 在 org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:185) 在 org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:234) 在 java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) 在 java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) 在 java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834) 引起: java.lang.NoClassDefFoundError:无法初始化类 org.apache.ignite.stream.kafka.connect.IgniteSinkTask$StreamerContext$Holder 在 org.apache.ignite.stream.kafka.connect.IgniteSinkTask$StreamerContext.getStreamer(IgniteSinkTask.java:198) 在 org.apache.ignite.stream.kafka.connect.IgniteSinkTask.put(IgniteSinkTask.java:118) 在 org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:586)

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 向我们展示错误中的类实际存在 - stackoverflow.com/a/1343026/2308683
  • 您好,该类是 kafka-ignite.2.9.1.jar 的一部分,我已经编辑了问题。请查看和指导。此外,仅当我尝试在分布式模式下运行它时才会弹出错误,在独立模式下它不会显示任何此类问题。是因为类的静态性质吗?

标签: java apache-kafka apache-kafka-connect ignite noclassdeffounderror


【解决方案1】:

如果 Java 虚拟机或 ClassLoader 实例尝试加载类的定义(作为正常方法调用的一部分或作为使用 new 表达式创建新实例的一部分)并且没有定义可以找到该类。搜索到的类定义在编译当前执行的类时存在,但无法再找到该定义。简而言之,该类在编译时可用,但在运行时丢失。

请参考以下进一步调试:

http://javareferencegv.blogspot.com/2013/10/debugging-javalangnoclassdeffounderror.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 2021-05-23
    • 2021-02-05
    • 1970-01-01
    • 2022-06-10
    • 2018-10-05
    • 1970-01-01
    相关资源
    最近更新 更多