Magic v1不支持记录头?

时间:2020-02-06 09:35:19

标签: spring-kafka

我使用spring-boot(2.2.4),spring-kafka(2.3.5),Gradle和Kotlin。 我想使用标头来映射类型,但是我不知道该怎么做...

我看到spring-kafka reference并编写下一个代码:

我的配置:

@Configuration
class KafkaProducerConfig {

fun defaultConfig(): HashMap<String, Any> {
    var config = HashMap<String, Any>()
    config[ProducerConfig.BOOTSTRAP_SERVERS_CONFIG] = "localhost:9092"
    config[ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG] = IntegerSerializer::class.java
    config[ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG] = JsonSerializer::class.java
    config[JsonSerializer.TYPE_MAPPINGS] = "order:${Order::class.java}, client:${Client::class.java}"

    return config
}

@Bean
fun orderTemplate(): KafkaTemplate<Int, Order> {
    val factory = DefaultKafkaProducerFactory<Int, Order>(defaultConfig(),
            IntegerSerializer(),
            JsonSerializer<Order>())
    return KafkaTemplate(factory)
}
}

我发送数据:

@Service
class ProducerService(@Autowired val orderSender: KafkaTemplate<Int, Order> { 

@Scheduled(fixedDelay = 2000)
fun send() {
    orderSender.send("order.t", 1, Order())
}

我收到以下错误:

Magic v1不支持记录头

请帮助我。

1 个答案:

答案 0 :(得分:0)

这意味着您的Kafka经纪人太老(<0.11.0.0),无法支持标头。

JSON序列化程序(默认情况下)会在记录头中添加类型信息,因此接收系统会提供一些有关如何反序列化的提示。

如果您必须使用这样的旧代理,则可以通过以下方式关闭发送报头

/**
 * Set to false to disable adding type info headers.
 * @param addTypeInfo true to add headers.
 * @since 2.1
 */
public void setAddTypeInfo(boolean addTypeInfo) {
    this.addTypeInfo = addTypeInfo;
}

在串行器上。