spring-kafka - Magic v1 不支持记录标题?
问题描述
我使用 spring-boot (2.2.4)、spring-kafka (2.3.5)、Gradle 和 Kotlin。我想将标题用于映射类型,但我不明白怎么做......
我看到spring-kafka 参考并编写下一个代码:
我的配置:
@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 不支持记录头
请帮我。
解决方案
这意味着您的 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;
}
在序列化器上。
推荐阅读
- spring - Spring Basic - 列问题的数据库更新
- javascript - Axios - 为什么我无法读取标头身份验证?
- python - 将 Json 转换为数据框
- url - 按索引导航到 YouTube 播放列表中的视频
- algorithm - 如何确定线段是否部分包含在(相交)THREE.js 中的截锥体中?
- docker - 仅当 ecs 集群任务使用桥接网络接口时 ec2 实例超时
- android - 通过 Webrtc 在 Android 上流式传输系统音频
- microservices - 请求发送到客户端后,请求 json 中会显示重复的对象
- annotations - JAXRS 中的自定义注解
- javascript - 如何在此节点登录 API 中返回角色