Java 如何使用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;

我正试图使用Avro&Kafka发送一个对象列表,我的主要问题是我的列表大小可能会经常变化,所以我不知道如何构建动态Avro模式,因为据我所知,Avro模式是用于众所周知的结构的


有人知道怎么做吗?

我认为最简单的方法是 用列表制作一个类, 例如:

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。这给了您一些灵活性: