更新到spring-boot 2.0后,发送消息时,Spring Kafka生产者失败

时间:2018-10-08 18:57:11

标签: spring-kafka

尝试更新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

2 个答案:

答案 0 :(得分:1)

当kafka代理版本与客户端版本不匹配时,会引发

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配置了以下属性:

  • inter.broker.protocol.version
  • log.message.format.version

删除这些设置后,我成功地从Spring Boot 2应用程序生成并使用了消息。