如何解决 java.lang.IllegalArgumentException 不支持的 Avro 类型

how to resolve java.lang.IllegalArgumentException Unsupported Avro type

private KafkaTemplate<String, KafkaMessage> kafkaTemplate; 

Message<KafkaMessage> message = MessageBuilder
        .withPayload(kafkaMessage)
        .setHeader(KafkaHeaders.TOPIC, targetTopic)
        .setHeader(KafkaHeaders.MESSAGE_KEY, "someStringValue" )
        .setHeader("X-Custom-Header", headerCreator.generateHeader(source, type)).build(); 

ListenableFuture<SendResult<String, KafkaMessage>> listenableFuture = kafkaTemplate.send(message); 

这是我的代码。异常发生在 send 方法。

例外是java.lang.IllegalArgumentException: Unsupported Avro type. Supported types are null, Boolean, Integer, Long, Float, Double, String, byte[] and IndexedRecord ?

假设 Kafka 主题需要一个 AVRO 序列化对象,您可以将插件“avro-maven-plugin”添加到项目 POM 中,让 Maven 为您生成 AVRO 类。

此插件读取 AVRO 模式的文件,并自动(一旦构建项目)生成 POJO 类。如果架构包含错误或无效,您将在执行任何代码之前收到警告。

KafkaTeamplate 应该使用这个 POJO 而不是 KafkaMessage。

我建议阅读 How to Use Schema Registry and Avro in Spring Boot Applications 完整的消费者和生产者示例,使用 Confluent 组件,了解整个项目配置(SERDE、模式注册表等)。