Java 如何使用avro&;发送对象列表;卡夫卡
我正试图使用Avro&Kafka发送一个对象列表,我的主要问题是我的列表大小可能会经常变化,所以我不知道如何构建动态Avro模式,因为据我所知,Avro模式是用于众所周知的结构的Java 如何使用avro&;发送对象列表;卡夫卡,java,apache-kafka,avro,Java,Apache Kafka,Avro,我正试图使用Avro&Kafka发送一个对象列表,我的主要问题是我的列表大小可能会经常变化,所以我不知道如何构建动态Avro模式,因为据我所知,Avro模式是用于众所周知的结构的 有人知道怎么做吗?我认为最简单的方法是 用列表制作一个类, 例如: public class AvroObj { private List<TestObj> list; public List<TestObj> getList() { return list;
有人知道怎么做吗?我认为最简单的方法是 用列表制作一个类, 例如:
public class AvroObj {
private List<TestObj> list;
public List<TestObj> getList() {
return list;
}
public void setList(List<TestObj> list) {
this.list = list;
}
}
使用ReflectDatumWriter将其序列化为字节(我提供它是因为使用另一个数据编写器时,您可能会捕获ClassCastException)
try(ByteArrayOutputStream out=newbytearrayoutputstream()){
BinaryEncoder编码器=EncoderFactory.get().BinaryEncoder(out,null);
DatumWriter=新的反射DatumWriter(模式);
writer.write(avroObj,编码器);
encoder.flush();
byte[]bytes=out.toByteArray();
}
然后与卡夫卡制作人发送字节
反序列化使用者接收的字节:
DatumReader<AvroObj> reader1 = new ReflectDatumReader<AvroObj>(schema);
Decoder decoder = DecoderFactory.get().binaryDecoder(bytes, null);
AvroObj decodedAvroObj = reader1.read(null, decoder);
DatumReader reader1=新的ReflectDatumReader(模式);
Decoder Decoder=DecoderFactory.get().binaryDecoder(字节,null);
AvroObj decodedAvroObj=reader1.read(空,解码器);
我认为最简单的方法是
用列表制作一个类,
例如:
public class AvroObj {
private List<TestObj> list;
public List<TestObj> getList() {
return list;
}
public void setList(List<TestObj> list) {
this.list = list;
}
}
使用ReflectDatumWriter将其序列化为字节(我提供它是因为使用另一个数据编写器时,您可能会捕获ClassCastException)
try(ByteArrayOutputStream out=newbytearrayoutputstream()){
BinaryEncoder编码器=EncoderFactory.get().BinaryEncoder(out,null);
DatumWriter=新的反射DatumWriter(模式);
writer.write(avroObj,编码器);
encoder.flush();
byte[]bytes=out.toByteArray();
}
然后与卡夫卡制作人发送字节
反序列化使用者接收的字节:
DatumReader<AvroObj> reader1 = new ReflectDatumReader<AvroObj>(schema);
Decoder decoder = DecoderFactory.get().binaryDecoder(bytes, null);
AvroObj decodedAvroObj = reader1.read(null, decoder);
DatumReader reader1=新的ReflectDatumReader(模式);
Decoder Decoder=DecoderFactory.get().binaryDecoder(字节,null);
AvroObj decodedAvroObj=reader1.read(空,解码器);
Avro支持一些复杂类型,如arras、maps。这给了您一些灵活性:Avro支持一些复杂类型,如arras、maps。这给了您一些灵活性: