【问题标题】:How to send a list of objects using avro & kafka如何使用 avro 和 kafka 发送对象列表
【发布时间】:2016-12-15 16:26:57
【问题描述】:

我正在尝试使用 Avro 和 Kafka 发送对象列表,我的主要问题是我的列表大小可能会经常更改,所以我不知道如何构建动态 Avro 架构,因为据我了解 Avro架构适用于众所周知的结构。

有人知道怎么做吗?

【问题讨论】:

标签: java apache-kafka avro


【解决方案1】:

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

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 producer 发送字节。

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

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

【讨论】:

    猜你喜欢
    • 2019-11-03
    • 2020-08-05
    • 2020-05-03
    • 2019-05-24
    • 1970-01-01
    • 2020-07-06
    • 2021-11-25
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多