gpt4 book ai didi

java - 如何使用 avro 和 kafka 发送对象列表

转载 作者:太空宇宙 更新时间:2023-11-04 11:58:17 24 4
gpt4 key购买 nike

我正在尝试使用 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;
}
}

创建架构:

Schema schema = ReflectData.get().getSchema(AvroObj.class);

使用 ReflectDatumWriter 将其序列化为字节(我提供它是因为使用其他数据编写器您可能会捕获 ClassCastException)

try(ByteArrayOutputStream out = new ByteArrayOutputStream()) {
BinaryEncoder encoder = EncoderFactory.get().binaryEncoder(out, null);
DatumWriter<AvroObj> writer = new ReflectDatumWriter<>(schema);
writer.write(avroObj, encoder);
encoder.flush();
byte[] bytes = out.toByteArray();
}

然后与kafka生产者发送字节。

反序列化消费者收到的字节:

DatumReader<AvroObj> reader1 = new ReflectDatumReader<AvroObj>(schema);
Decoder decoder = DecoderFactory.get().binaryDecoder(bytes, null);
AvroObj decodedAvroObj = reader1.read(null, decoder);

关于java - 如何使用 avro 和 kafka 发送对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41168912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com