Apache kafka 春天卡夫卡-遭遇”;Magic v0不支持记录头“;错误
我正在运行一个Spring启动应用程序,并且已经开始编译('org.springframework.kafka:springkafka:2.1.5.RELEASE') 我正试图反对使用此版本安装Cloudera:Apache kafka 春天卡夫卡-遭遇”;Magic v0不支持记录头“;错误,apache-kafka,cloudera,flume,spring-kafka,Apache Kafka,Cloudera,Flume,Spring Kafka,我正在运行一个Spring启动应用程序,并且已经开始编译('org.springframework.kafka:springkafka:2.1.5.RELEASE') 我正试图反对使用此版本安装Cloudera: apachekafka版本3.0.0-1.3.0.0.p0.40版本0.11.0+kafka3.0.0+50的Cloudera发行版 我的KafkaProducerConfig类非常简单: @Configuration public class KafkaProducerConfig
apachekafka版本3.0.0-1.3.0.0.p0.40版本0.11.0+kafka3.0.0+50的Cloudera发行版
我的KafkaProducerConfig类非常简单:
@Configuration
public class KafkaProducerConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(KafkaProducerConfig.class);
@Value("${spring.kafka.bootstrap-servers}")
private String bootstrapServers;
@Value("${spring.kafka.template.default-topic}")
private String defaultTopicName;
@Value("${spring.kafka.producer.compression-type}")
private String producerCompressionType;
@Value("${spring.kafka.producer.client-id}")
private String producerClientId;
@Bean
public Map<String, Object> producerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, this.bootstrapServers);
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
props.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, this.producerCompressionType);
props.put(ProducerConfig.CLIENT_ID_CONFIG, this.producerClientId);
props.put(JsonSerializer.ADD_TYPE_INFO_HEADERS, false);
return props;
}
@Bean
public ProducerFactory<String, Pdid> producerFactory() {
return new DefaultKafkaProducerFactory<>(producerConfigs());
}
@Bean
public KafkaTemplate<String, Pdid> kafkaTemplate() {
KafkaTemplate<String, Pdid> kafkaTemplate = new KafkaTemplate<>(producerFactory());
kafkaTemplate.setDefaultTopic(this.defaultTopicName);
return kafkaTemplate;
}
@PostConstruct
public void postConstruct() {
LOGGER.info("Kafka producer configuration: " + this.producerConfigs().toString());
LOGGER.info("Kafka topic name: " + this.defaultTopicName);
}
我从生产者应用程序方面尝试了以下几点:
producertinterceptor
添加到producer配置中,并检查onSend()
方法中的ProducerRecord
headers
属性,以了解输出消息中的头设置
如果您使用的是spring消息(
template.setn(Message m)
,默认情况下会映射头)。使用原始template.send()
方法将不会设置任何标题(除非您发送填充标题的ProducerRecord
。问题的解决方案是两方面的混合:
JsonSerializer.add\u TYPE\u INFO\u头到false
,就像Gary Russell建议的那样我已经将我的应用程序升级到Spring boot 2x,并且我与kafka客户端依赖项存在一些兼容性问题(请参阅),因此我也必须升级它。另一方面,我有一个旧的代理(kafka 0.10)在服务器上运行,然后我无法向它发送消息。我还意识到,即使将
JsonSerializer.ADD_TYPE_INFO_HEADERS
设置为false,卡夫卡制作人也在内部设置了头,因为魔法是根据卡夫卡的版本(在RecordBatch
中)来修复的在这种情况下,如果(magicMemoryRecordsBuilder.appendWithOffset
:。
最后,我解决这个问题的唯一方法是升级我的卡夫卡服务器。谢谢你的建议/澄清。我已经更新了我的原始帖子,使其具有完整的卡夫卡制作人配置,而不仅仅是我最初发布的部分。谢谢,但是send()
您在模板上使用的方法是什么?我们使用的是kafkaTemplate.sendDefault
one,在application.yml文件.Aha中设置了默认主题-因此downConvert
是因为主题中已有消息头,但消费者不支持它们。
[KafkaApi-131] Error when handling request {replica_id=-1,max_wait_time=500,min_bytes=1,topics=[{topic=profiles-pdid,partitions=[{partition=0,fetch_offset=7,max_bytes=1048576}]}]}java.lang.IllegalArgumentException: Magic v0 does not support record headers
at org.apache.kafka.common.record.MemoryRecordsBuilder.appendWithOffset(MemoryRecordsBuilder.java:385)
at org.apache.kafka.common.record.MemoryRecordsBuilder.append(MemoryRecordsBuilder.java:568)
at org.apache.kafka.common.record.AbstractRecords.convertRecordBatch(AbstractRecords.java:117)
at org.apache.kafka.common.record.AbstractRecords.downConvert(AbstractRecords.java:98)
at org.apache.kafka.common.record.FileRecords.downConvert(FileRecords.java:245)
at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$convertedPartitionData$1$1$$anonfun$apply$5.apply(KafkaApis.scala:523)
at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$convertedPartitionData$1$1$$anonfun$apply$5.apply(KafkaApis.scala:521)
at scala.Option.map(Option.scala:146)
at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$convertedPartitionData$1$1.apply(KafkaApis.scala:521)
at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$convertedPartitionData$1$1.apply(KafkaApis.scala:511)
at scala.Option.flatMap(Option.scala:171)
at kafka.server.KafkaApis.kafka$server$KafkaApis$$convertedPartitionData$1(KafkaApis.scala:511)
at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$createResponse$2$1.apply(KafkaApis.scala:559)
at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$createResponse$2$1.apply(KafkaApis.scala:558)
at scala.collection.Iterator$class.foreach(Iterator.scala:891)
at scala.collection.AbstractIterator.foreach(Iterator.scala:1334)
at scala.collection.IterableLike$class.foreach(IterableLike.scala:72)
at scala.collection.AbstractIterable.foreach(Iterable.scala:54)
at kafka.server.KafkaApis.kafka$server$KafkaApis$$createResponse$2(KafkaApis.scala:558)
at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$fetchResponseCallback$1$1.apply$mcVI$sp(KafkaApis.scala:579)
at kafka.server.ClientQuotaManager.recordAndThrottleOnQuotaViolation(ClientQuotaManager.scala:196)
at kafka.server.KafkaApis.sendResponseMaybeThrottle(KafkaApis.scala:2014)
at kafka.server.KafkaApis.kafka$server$KafkaApis$$fetchResponseCallback$1(KafkaApis.scala:578)
at kafka.server.KafkaApis$$anonfun$kafka$server$KafkaApis$$processResponseCallback$1$1.apply$mcVI$sp(KafkaApis.scala:598)
at kafka.server.ClientQuotaManager.recordAndThrottleOnQuotaViolation(ClientQuotaManager.scala:196)
at kafka.server.ClientQuotaManager.recordAndMaybeThrottle(ClientQuotaManager.scala:188)
at kafka.server.KafkaApis.kafka$server$KafkaApis$$processResponseCallback$1(KafkaApis.scala:597)
at kafka.server.KafkaApis$$anonfun$handleFetchRequest$1.apply(KafkaApis.scala:614)
at kafka.server.KafkaApis$$anonfun$handleFetchRequest$1.apply(KafkaApis.scala:614)
at kafka.server.ReplicaManager.fetchMessages(ReplicaManager.scala:639)
at kafka.server.KafkaApis.handleFetchRequest(KafkaApis.scala:606)
at kafka.server.KafkaApis.handle(KafkaApis.scala:98)
at kafka.server.KafkaRequestHandler.run(KafkaRequestHandler.scala:66)
at java.lang.Thread.run(Thread.java:748)