如何修复Java Kafka consumer中的org.apache.avro.message.BadHeaderException:无法识别的头字节?

如何修复Java Kafka consumer中的org.apache.avro.message.BadHeaderException:无法识别的头字节?,java,apache-kafka,avro,Java,Apache Kafka,Avro,我正在为卡夫卡消费者实现一个Avro反序列化程序。但是,当我运行consumer时,反序列化该值时会出现一个错误,表示存在无法识别的头字节 首先,我决定检查引起错误的相关记录。我使用第三方可视化工具为卡夫卡实现了这一点。我可以看到记录是正确的,第三方工具可以正确地使用来自该主题的Avro消息。因此,这告诉我问题可能出在反序列化器的实现上 下面是我对反序列化器类的实现 公共类UserRecordDeserializer实现反序列化器{ ... @凌驾 public userRecord反序列化(字

我正在为卡夫卡消费者实现一个Avro反序列化程序。但是,当我运行consumer时,反序列化该值时会出现一个错误,表示存在无法识别的头字节

首先,我决定检查引起错误的相关记录。我使用第三方可视化工具为卡夫卡实现了这一点。我可以看到记录是正确的,第三方工具可以正确地使用来自该主题的Avro消息。因此,这告诉我问题可能出在反序列化器的实现上

下面是我对反序列化器类的实现

公共类UserRecordDeserializer实现反序列化器{
...
@凌驾
public userRecord反序列化(字符串主题,字节[]数据){
如果(数据==null){
返回null;
}
试一试{
ByteBuffer userRecordBuffer=ByteBuffer.wrap(数据);
userRecord newRecord=解码userRecord(userRecordBuffer);
返回新记录;
}捕获(IOException | RuntimeException e){
抛出新的RuntimeException(“反序列化值时出错”,e);
}
}
私有userRecord decodeUserRecord(java.nio.ByteBuffer数据)引发IOException{
试一试{
userRecord temp=new userRecord();
从ByteBuffer返回的温度(数据);
}捕获(IOE异常){
e、 printStackTrace();
返回null;
}
}
}
下面是Avro生成类的解码器和fromByteBuffer方法


专用静态最终二进制消息解码器=
新的BinaryMessageDecoder(MODEL$,SCHEMA$);
来自ByteBuffer的公共静态用户记录(
java.nio.ByteBuffer b)抛出java.io.IOException{
返回解码器。解码(b);
}
原因:java.lang.RuntimeException:反序列化值时出错
位于com.package.serdes.UserRecordDeserializer.deserialize(UserRecordDeserializer.java:30)
位于com.package.UserRecordDeserializer.deserialize(UserRecordDeserializer.java:11)
位于org.apache.kafka.common.serialization.Deserializer.deserialize(Deserializer.java:58)
位于org.apache.kafka.clients.consumer.internal.Fetcher.parseRecord(Fetcher.java:1030)
位于org.apache.kafka.clients.consumer.internals.Fetcher.access$3300(Fetcher.java:110)
位于org.apache.kafka.clients.consumer.internal.Fetcher$PartitionRecords.fetchRecords(Fetcher.java:1250)
位于org.apache.kafka.clients.consumer.internal.Fetcher$PartitionRecords.access$1400(Fetcher.java:1099)
位于org.apache.kafka.clients.consumer.internal.Fetcher.fetchRecords(Fetcher.java:545)
位于org.apache.kafka.clients.consumer.internal.Fetcher.fetchedRecords(Fetcher.java:506)
访问org.apache.kafka.clients.consumer.KafkaConsumer.pollForFetches(KafkaConsumer.java:1269)
访问org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1200)
访问org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:1176)
在com.package.consumer.ActivitiesKafkaSimpleConsumerImpl.run(ActivitiesKafkaSimpleConsumerImpl.java:25)
位于com.package.RunConsumer.main(RunConsumer.java:11)
原因:org.apache.avro.message.BadHeaderException:无法识别的头字节:0x00 0x00
位于org.apache.avro.message.BinaryMessageDecoder.decode(BinaryMessageDecoder.java:147)
位于org.apache.avro.message.MessageDecoder$BaseDecoder.decode(MessageDecoder.java:139)
位于org.apache.avro.message.MessageDecoder$BaseDecoder.decode(MessageDecoder.java:127)
位于com.package.models.userRecord.fromByteBuffer(userRecord.java:71)
位于com.package.serdes.UserRecordDeserializer.decodeUserRecord(UserRecordDeserializer.java:42)
位于com.package.serdes.UserRecordDeserializer.deserialize(UserRecordDeserializer.java:27)
... 还有13个

使用现有合流Avro序列化程序是否有具体原因?