GraalVM、Apache Kafka:找不到org.apache.Kafka.common.serialization.StringSerializer的公共无参数构造函数

yqkkidmi  于 2023-10-15  发布在  Apache
关注(0)|答案(1)|浏览(125)

我目前正在开发一个Java应用程序,它是一个Kafka-Producer。我已经用Maven完成并完全测试了代码,一切都很好。然后我想得到一个Graal-Native-Image来执行生产者代码。
我正在用“mvn -Pnative包”构建项目,一切都构建得很好。(也使用文档中的maven配置文件:(https://graalvm.github.io/native-build-tools/latest/maven-plugin.html))。当尝试通过“./MyApp”启动图像时,我收到以下错误:

Exception in thread "main" org.apache.kafka.common.KafkaException: Failed to construct kafka producer
        at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:465)
        at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:290)
        at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:317)
        at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:302)
        at Main.main(Main.java:23)
Caused by: org.apache.kafka.common.KafkaException: Could not find a public no-argument constructor for org.apache.kafka.common.serialization.StringSerializer
        at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:397)
        at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstance(AbstractConfig.java:401)
        at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstance(AbstractConfig.java:440)
        at org.apache.kafka.common.config.AbstractConfig.getConfiguredInstance(AbstractConfig.java:425)
        at org.apache.kafka.clients.producer.KafkaProducer.<init>(KafkaProducer.java:380)
        ... 4 more
Caused by: java.lang.NoSuchMethodException: org.apache.kafka.common.serialization.StringSerializer.<init>()
        at [email protected]/java.lang.Class.checkMethod(DynamicHub.java:1038)
        at [email protected]/java.lang.Class.getConstructor0(DynamicHub.java:1204)
        at [email protected]/java.lang.Class.getDeclaredConstructor(DynamicHub.java:2754)
        at org.apache.kafka.common.utils.Utils.newInstance(Utils.java:395)
        ... 8 more

下面的代码片段表示可能发生错误的代码:

Properties properties = new Properties();
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        properties.put("schema.registry.url", "http://localhost:8081");
        properties.put("key.serializer", Class.forName("org.apache.kafka.common.serialization.StringSerializer"));
        properties.put("value.serializer", Class.forName("io.confluent.kafka.serializers.KafkaAvroSerializer"));

        final org.apache.kafka.clients.producer.Producer<String, GenericRecord> producer = new KafkaProducer<>(properties);
        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
            System.out.println("Stopping Producer");
            producer.close();
        }));

我的猜测是,Kafka Dependency只是没有被正确导入,但在我的pom.xml中尝试没有它,“mvn package”命令甚至不会在没有错误的情况下工作。我用的是最新的Kafka版本。我还尝试使用尽可能少的依赖项,并查看其中一个是否会出现问题。我是否缺少任何特定的GraalVM配置?我对这个主题很陌生。
我希望这是所有与这种问题相关的信息,否则我当然会分享它,如果缺少了什么。先谢了。

olmpazwi

olmpazwi1#

所以,我遇到的问题是我根本不知道用Kafka配置GraalVM。在下面的链接中,我找到了将confluent schema registry的请求json文件添加到我的项目中的问题的解决方案:https://jeqo.github.io/posts/2022-03-18-kafka-clients-graalvm/

相关问题