java.lang.ClassCastException:xx不能强制转换为org.apache.avro.generic.IndexedRecord
我能够将我的JavaBean类作为avro记录发布到kafka。但当我试图消费时,我得到了类强制转换异常。为什么会发生这种情况 制作人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);
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的问题。