Spring-boot kafka 应用程序到 GraalVM 本机映像 - org.apache.kafka.streams.processor.internals.DefaultKafkaClientSupplier 无法找到

问题描述 投票:0回答:1

我有使用 spring-kafka 和 kafka-streams 的 Java Spring-boot 应用程序。 我正在尝试使用

构建 GraalVM 本机映像
 mvn -Pnative spring-boot:build-image

构建成功,但是当我尝试在 docker 中运行图像时,出现异常:

Caused by: org.apache.kafka.common.config.ConfigException: Invalid value org.apache.kafka.streams.processor.internals.DefaultKafkaClientSupplier for configuration default.client.supplier: Class org.apache.kafka.streams.processor.internals.DefaultKafkaClientSupplier could not be found.
        at org.apache.kafka.common.config.ConfigDef.parseType(ConfigDef.java:747)
        at org.apache.kafka.common.config.ConfigDef$ConfigKey.<init>(ConfigDef.java:1175)
        at org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:155)
        at org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:175)
        at org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:214)
        at org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:376)
        at org.apache.kafka.common.config.ConfigDef.define(ConfigDef.java:389)
        at org.apache.kafka.streams.StreamsConfig.<clinit>(StreamsConfig.java:1008)
        ... 16 common frames omitted

卡夫卡配置:

spring:
  kafka:
    producer:
      value-serializer: "org.springframework.kafka.support.serializer.JsonSerializer"
      properties:
        spring:
          json:
            type:
              mapping: "ErrorReportDomain:com.kt.kafka.messagingprocessor.domain.ErrorReportDomain"
    client-id: messaging-processor
    bootstrap-servers:
      - "XXX"
    security:
      protocol: SASL_PLAINTEXT
    properties:
      sasl:
        mechanism: SCRAM-SHA-512
        jaas:
          config: org.apache.kafka.common.security.scram.ScramLoginModule required username="XXX" password="XXX";
    streams:
      application.id: messaging-processor
      properties:
        spring:
          json:
            trusted:
              packages: '*'
        default:
          key:
            serde: org.apache.kafka.common.serialization.Serdes$StringSerde
          value:
            serde: org.springframework.kafka.support.serializer.JsonSerde

请问有什么建议吗?

java spring-boot spring-kafka apache-kafka-streams graalvm
1个回答
0
投票

我们最近将 Kafka Streams 提示添加到 GraalVM 可访问性元数据中:https://github.com/oracle/graalvm-reachability-metadata/pull/422

但显然还没有发布。

因此,要使其在您的应用程序中运行,您需要手动提供这些提示。

看起来您没有使用Spring Cloud Stream,所以我建议将此类复制/粘贴到您的项目中:https://github.com/spring-cloud/spring-cloud-stream/blob/main/binders /kafka-binder/spring-cloud-stream-binder-kafka-streams/src/main/java/org/springframework/cloud/stream/binder/kafka/streams/aot/KafkaStreamsBinderRuntimeHints.java

可能需要进行一些修改,删除 Spring Cloud Stream 特定条目。

查看更多有关手动提示注册的文档:https://docs.spring.io/spring-framework/reference/core/aot.html#aot.hints

© www.soinside.com 2019 - 2024. All rights reserved.