簡體   English   中英

通用類型的 AVRO 模式 - Java

[英]AVRO schema for generic type - Java

我想為我的 Kafka 消息有效負載包含 traceId 和元數據。 所以我為 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 模式中表示這兩種類型。 有可能這樣嗎? 如果是這樣,請幫助我。

我可以將 JSON 序列化器/反序列化器用於 Kafka 消息生產者和消費者。 但我期待使用 Avro。

謝謝。

Avro 本身不執行 generics 或 inheritance。 Jackson Avro 庫可能對此有所幫助,但您可能會遇到奇怪的邊緣情況。

相反,如果您想支持的不僅僅是 Avro 的 JVM 實現,您可以定義一個包裝字節的模式,並且您必須對事件進行兩次反序列化(外部和內部消息),您甚至可以混合和匹配數據格式

record Event {
    string traceId;
    map<string> metadata;
    bytes content;
}

這與 CloudEvents 規范的工作方式非常相似

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM