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

时间:2020-10-13 12:54:51

标签: apache-kafka kafka-producer-api

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吗?

1 个答案:

答案 0 :(得分:1)

假设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,架构注册表等)。