【发布时间】:2017-07-26 23:06:53
【问题描述】:
我在这里找到了一些代码https://docs.microsoft.com/en-us/azure/hdinsight/hdinsight-dotnet-avro-serialization#Scenario2,它可以反转我所需要的:
//Define the schema in JSON
const string Schema = @"{
""type"":""record"",
""name"":""Microsoft.Hadoop.Avro.Specifications.SensorData"",
""fields"":
[
{
""name"":""Location"",
""type"":
{
""type"":""record"",
""name"":""Microsoft.Hadoop.Avro.Specifications.Location"",
""fields"":
[
{ ""name"":""Floor"", ""type"":""int"" },
{ ""name"":""Room"", ""type"":""int"" }
]
}
},
{ ""name"":""Value"", ""type"":""bytes"" }
]
}";
//Create a generic serializer based on the schema
var serializer = AvroSerializer.CreateGeneric(Schema);
我想采用我创建的模型:
[DataContract(Name = "Demo", Namespace = "pubsub.demo")]
public class Demo
{
[DataMember(Name = "value")]
public long Value { get; set; }
}
...并将此 C# 模型序列化为 JSON AVRO Schema 字符串。
原因:
我只想维护 C# 模型并自动将这些模型注册到 Confluent 的 Schema Registry。要向架构注册表注册,架构需要采用 JSON AVRO 格式(就像上面的 Schema)。
我不希望同时定义 JSON 和 C# 模型。如果我必须维护一个,我更愿意拥有一个 C# 模型。
【问题讨论】:
-
后期评论:Confluent-dotnet-kafka 库现在包含 avrogen,这是一个将架构转换为 C# 对象的工具
-
@cricket_007 如果您将消息发布为
ISpecificRecord或GenericRecord,对消费者有什么不同吗?或者那些仍然是消息中的相同字节数组? -
@Olegi 字节将是相同的
-
@cricket_007 感谢您的回复!如果您的主题包含不同的事件模型,生成消息的首选方式是什么?我应该生成特定记录还是通用记录?此外,作为消费者,我认为只有一种方式可以从该主题中消费 - 是 GenericRecord?因为基本上你不能在构建消费者时传递你期望的类型数组。在网络上真的没有这些场景的示例:(
-
@OlegI 你可以看这个关于C#支持多种类型的问题github.com/confluentinc/confluent-kafka-dotnet/issues/746
标签: c# avro confluent-schema-registry