java.lang.ClassCastException:xx不能强制转换为org.apache.avro.generic.IndexedRecord

java.lang.ClassCastException:xx不能强制转换为org.apache.avro.generic.IndexedRecord,java,apache-kafka,avro,kafka-consumer-api,Java,Apache Kafka,Avro,Kafka Consumer Api,我能够将我的JavaBean类作为avro记录发布到kafka。但当我试图消费时,我得到了类强制转换异常。为什么会发生这种情况 制作人 Schema schema = new Schema.Parser().parse(new File("/schemas/avro_schemas/test_schema.avsc")); GenericRecord payload = new GenericData.Record(schema); payload.put("name", fileName);

我能够将我的JavaBean类作为avro记录发布到kafka。但当我试图消费时,我得到了类强制转换异常。为什么会发生这种情况

制作人

Schema schema = new Schema.Parser().parse(new File("/schemas/avro_schemas/test_schema.avsc"));

GenericRecord payload = new GenericData.Record(schema);
payload.put("name", fileName);
payload.put("timestamp", dateTime.toString());
payload.put("source", source);
payload.put("content", buf);
payload.put("customerCode", customercode); 
producer.publish(topic, payload, schema);
ConsumerIterator<byte[], byte[]> it = stream.iterator();
while (it.hasNext()) {
try {
byte[] received_message = it.next().message();
Schema  schema = new Schema.Parser().parse(new File("/schemas/avro_schemas/test_schema.avsc"));
DatumReader<GenericRecord> reader = new SpecificDatumReader<GenericRecord>(schema);
Decoder decoder = DecoderFactory.get().binaryDecoder(received_message, null);
GenericRecord   payload = reader.read(null, decoder);
消费者

Schema schema = new Schema.Parser().parse(new File("/schemas/avro_schemas/test_schema.avsc"));

GenericRecord payload = new GenericData.Record(schema);
payload.put("name", fileName);
payload.put("timestamp", dateTime.toString());
payload.put("source", source);
payload.put("content", buf);
payload.put("customerCode", customercode); 
producer.publish(topic, payload, schema);
ConsumerIterator<byte[], byte[]> it = stream.iterator();
while (it.hasNext()) {
try {
byte[] received_message = it.next().message();
Schema  schema = new Schema.Parser().parse(new File("/schemas/avro_schemas/test_schema.avsc"));
DatumReader<GenericRecord> reader = new SpecificDatumReader<GenericRecord>(schema);
Decoder decoder = DecoderFactory.get().binaryDecoder(received_message, null);
GenericRecord   payload = reader.read(null, decoder);
Avro模式

{
    "namespace": "com.xx"
     "type": "record",
     "name": "File",
     "fields":[
         {
            "name": "name", "type": "string"
         },
         {
            "name": "timestamp",  "type": "string"
         },
         {
            "name": "source", "type": "string"
         },
         {
            "name": "content", "type": "bytes"
         },
         {
            "name": "customerCode", "type": "string"
         }
     ]
}

根据这些意见,询问者已经找到了解决方案:

我修复了将SpecificDatumReader更改为GenericDatumReader的问题


可能是打字错误?在模式中,名称空间是com.xx,但异常写入com.xxx.File。我认为它选择了带有“name”字段的命名空间。@Patrick我修复了将SpecificDatumReader更改为GenericDatumReader的问题。