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
吗?
答案 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,架构注册表等)。