我目前正在开发一个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配置?我对这个主题很陌生。
我希望这是所有与这种问题相关的信息,否则我当然会分享它,如果缺少了什么。先谢了。
1条答案
按热度按时间olmpazwi1#
所以,我遇到的问题是我根本不知道用Kafka配置GraalVM。在下面的链接中,我找到了将confluent schema registry的请求json文件添加到我的项目中的问题的解决方案:https://jeqo.github.io/posts/2022-03-18-kafka-clients-graalvm/