【问题标题】:Avro Serialise to Azure EventHubAvro 序列化到 Azure EventHub
【发布时间】:2020-03-02 16:54:03
【问题描述】:

我在这个主题上找不到太多文档,但我正在将一个对象序列化到 Avro,然后发送到 Azure EventHub。我 认为 Avro 也需要包含架构。因为如果没有,消费者(例如 Azure 流分析)如何知道如何反序列化?

我可以在网上找到的唯一示例使用 Microsoft.Hadoop.Avro.Container 命名空间。这似乎工作正常,我可以通过流分析读取。但是此代码是否“自动”包含有效负载中的架构?我确定在这里看不到任何对它的引用:

        using (var memoryStream = new MemoryStream())
        using (var writer = AvroContainer.CreateWriter<T>(memoryStream, Codec.Null))
        using (var seqWriter = new SequentialWriter<T>(writer, items.Count()))
        {
            foreach (var e in items)
            {
                seqWriter.Write(e);
            }

            return memoryStream.ToArray();
        }

.Net 中的 Avro 格局似乎有些混乱,为什么会有 Microsoft 特定的 NuGet pkg?好像很老了,现在是不是被什么东西取代了?是否有任何文档说明如何利用标准 Apache.Avro NuGet pkg 构建包含架构的有效负载?

Azure 事件中心文档曾短暂提及 Avro,但任何 google 搜索都只会发现 Event Hub Capture..

总之..有更好的方法吗?我不认为我可以为此单独发送架构..

【问题讨论】:

  • 你能分享一下你指的是哪个微软文档吗?
  • 嗯,这真的.. docs.microsoft.com/en-us/azure/event-hubs/… 就像我说的,它主要与 EventHub Capture 方面有关.. 看不到任何关于 Avro 序列化有效负载的明显内容.. 流分析文档也是一个有点轻!
  • 我从最近的经验中得出的假设是,当您在 eventthubs 中写入 AVRO 时,数据嵌入在 AVRO 模式中,您不需要明确的模式定义。但是,我发现 Eventhubs 没有以 AVRO 格式显示摄取的数据并且无法反序列化以在 Azure 门户中正确显示它,这很奇怪。但是我的消费者可以解析数据并正确显示它

标签: c# avro azure-eventhub


【解决方案1】:

首先,Azure Stream Analytics 支持以 Avro 数据格式处理事件,您可以在官方文档Parse JSON and Avro data in Azure Stream Analytics 中看到,如下图。

即使假设 Azure 流分析无法如您所愿反序列化 Avro 格式的事件,您也可以编写自定义 .NET 反序列化器以使其适合您,如下面的官方文档所述。

  1. Tutorial: Custom .NET deserializers for Azure Stream Analytics
  2. Use .NET deserializers for Azure Stream Analytics jobs

同时,我不认为 Microsoft.Hadoop.Avro2 在您的场景中是适合 Avro 的库。除了它,还有其他选择

  1. Apache.Avro它的API参考页是https://avro.apache.org/docs/current/api/csharp/html/namespaces.html,你需要参考JavaPython的示例代码来编写你的C#代码。
  2. Microsoft.Avro.Core 及其 GitHub 代表 dougmsft/microsoft-avro 以及一些可以参考的测试代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-23
    • 2020-03-04
    • 1970-01-01
    • 2019-09-18
    • 1970-01-01
    • 2017-12-10
    • 2020-05-21
    • 2017-11-20
    相关资源
    最近更新 更多