我想包括traceid和kafka消息负载的元数据。因此,我为kafka消息负载定义了以下类型。
public class KafkaMessage<T> {
private String traceId;
private Map<String, String> metaData = new HashMap<>();
private T content;
}
我有两种狗和猫。我还创建了两种kafka消息负载类型。
public class Dog {
private int name;
}
public class DogKafkaMessage extends KafkaMessage<Dog>{
}
public class Car {
private int numberOfWheels;
}
public class CarKafkaMessage extends KafkaMessage<Car> {
}
我想在avro模式中表示这两种类型。有可能这样吗?如果是的话,请帮我解决这个问题。
我可以对kafka消息生产者和消费者使用json序列化器/反序列化器。但我很期待使用avro。
谢谢。
1条答案
按热度按时间ar7v8xwq1#
本来,avro不做泛型或继承。jacksonavro图书馆也许能帮上忙,但你可能会遇到奇怪的边缘案例。
相反,如果您不想只支持avro的jvm实现,您可以定义一个 Package 字节的模式,并且您必须将事件反序列化两次(外部消息和内部消息),在那里您甚至可以混合和匹配数据格式
这与cloudevents规范的工作原理非常相似
https://github.com/cloudevents/spec/blob/v1.0.1/avro-format.md
https://github.com/cloudevents/spec/blob/v1.0.1/kafka-protocol-binding.md