Java 将Avro GenericData.Record转换为字节数组失败
我从Java中的POJO类创建了GenericData.Record, 并尝试将此对象序列化为字节数组并发送给kafka topic, 使用附加的代码。 但我得到了以下例外: 无法将UserMetaData强制转换为org.apache.avro.generic.IndexedRecord 怎么了 谢谢Java 将Avro GenericData.Record转换为字节数组失败,java,apache-kafka,avro,Java,Apache Kafka,Avro,我从Java中的POJO类创建了GenericData.Record, 并尝试将此对象序列化为字节数组并发送给kafka topic, 使用附加的代码。 但我得到了以下例外: 无法将UserMetaData强制转换为org.apache.avro.generic.IndexedRecord 怎么了 谢谢 @Override public byte[] serialize(String topic, T data) { try { byte[] result = n
@Override
public byte[] serialize(String topic, T data) {
try {
byte[] result = null;
if (data != null) {
LOGGER.debug("data='{}'", data);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
BinaryEncoder binaryEncoder =
EncoderFactory.get().binaryEncoder(byteArrayOutputStream, null);
DatumWriter<GenericRecord> datumWriter = new GenericDatumWriter<>(data.getSchema());
datumWriter.write(data, binaryEncoder);
binaryEncoder.flush();
byteArrayOutputStream.close();
result = byteArrayOutputStream.toByteArray();
LOGGER.debug("serialized data='{}'", DatatypeConverter.printHexBinary(result));
}
return result;
} catch (IOException ex) {
throw new SerializationException(
"Can't serialize data='" + data + "' for topic='" + topic + "'", ex);
}
}
@覆盖
公共字节[]序列化(字符串主题,T数据){
试一试{
字节[]结果=空;
如果(数据!=null){
debug(“data='{}',data);
ByteArrayOutputStream ByteArrayOutputStream=新建ByteArrayOutputStream();
二进制编码器二进制编码器=
EncoderFactory.get().binaryEncoder(byteArrayOutputStream,null);
DatumWriter DatumWriter=新的GenericDatumWriter(data.getSchema());
写入(数据,二进制编码器);
binaryEncoder.flush();
byteArrayOutputStream.close();
结果=byteArrayOutputStream.toByteArray();
debug(“序列化数据='{}',DatatypeConverter.printHexBinary(结果));
}
返回结果;
}捕获(IOEX异常){
抛出新的序列化异常(
对于主题='“+topic+”,ex),无法序列化数据='“+data+”;
}
}
为什么不使用现有的合流Avro序列化程序?我认为你应该展示你的UserMetadata类,实际上我没有GenericData.Record的模式。(avdl/avsc),我通过反射生成它。因此,我不确定我是否可以使用Confluent Avro Serializer最新版本