尝试更新spring-boot服务以使用spring-boot 2.0.5和spring-kafka 2.1.10(来自spring-boot 1.5.x和spring-kafka 1.3.x),但是当出现以下错误时尝试使用JsonSerializer发布消息。
使用(JsonSerializer.ADD_TYPE_INFO_HEADERS,false)的我的生产者配置:
@Configuration
public class KafkaProducerConfig {
@Value("${spring.kafka.bootstrap-servers}")
private String bootstrapServers;
@Bean
public ProducerFactory<String, KafkaMessage> producerFactory() {
return new DefaultKafkaProducerFactory<>(producerConfigs());
}
@Bean
public Map<String, Object> producerConfigs() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(JsonSerializer.ADD_TYPE_INFO_HEADERS, false);
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
return configProps;
}
@Bean
public KafkaTemplate<String, KafkaMessage> kafkaTemplate() {
return new KafkaTemplate<>(producerFactory());
}
}
Kafka版本(使用kafka 1.0.0版进行编辑):
[2018-10-08 19:20:53,562] INFO Kafka version : 1.0.0 (org.apache.kafka.common.utils.AppInfoParser)
[2018-10-08 19:20:53,562] INFO Kafka commitId : aaa7af6d4a11b29d (org.apache.kafka.common.utils.AppInfoParser)
[2018-10-08 18:24:40,252]信息Kafka版本:2.0.0(org.apache.kafka.common.utils.AppInfoParser)
[2018-10-08 18:24:40,252]信息Kafka commitId:3402a8361b734732(org.apache.kafka.common.utils.AppInfoParser)
应用程序错误:
java.util.concurrent.ExecutionException: org.springframework.kafka.core.KafkaProducerException: Failed to send; nested exception is org.apache.kafka.common.errors.UnknownServerException: The server experienced an unexpected error when processing the request
Caused by: org.springframework.kafka.core.KafkaProducerException: Failed to send; nested exception is org.apache.kafka.common.errors.UnknownServerException: The server experienced an unexpected error when processing the request
kafka日志中的错误:
java.lang.IllegalArgumentException: Magic v1 does not support record headers
答案 0 :(得分:1)
Magic v1不支持记录头。
spring-kafka 2.1.10不支持kafka版本2.0.0。您需要使用spring-kafka 2.2.x才能与kafka 2.0.0一起使用。
关于Kafka客户端的兼容性,请从春季开始查看此官方doc。
答案 1 :(得分:0)
我的问题的根源是我们的kafka实现的配置。使用错误/较旧的版本kafka配置了以下属性:
删除这些设置后,我成功地从Spring Boot 2应用程序生成并使用了消息。