【问题标题】:how to resolve java.lang.IllegalArgumentException Unsupported Avro type如何解决 java.lang.IllegalArgumentException 不支持的 Avro 类型
【发布时间】:2020-10-13 23:39:32
【问题描述】:
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 ?

【问题讨论】:

  • 请显示完整的堆栈跟踪。您的错误是您没有发送 Avro 对象

标签: apache-kafka kafka-producer-api


【解决方案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、模式注册表等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多