通过 Azure Blob 存储或 Azure Data Lake Storage 中的 Azure 事件中心来捕获事件

使用 Azure 事件中心,可以按指定的时间间隔或大小差异在所选的 Azure Blob 存储或者 Azure Data Lake Storage Gen 1 或 Gen 2 帐户中自动捕获事件中心的流式处理数据。 设置捕获极其简单,无需管理费用即可运行它,并且可以使用事件中心标准层中的吞吐量单位或高级层中的处理单位自动缩放它。 事件中心捕获是在 Azure 中加载流式处理数据的最简单方法,并可让用户专注于数据处理,而不是数据捕获。

显示将事件中心数据捕获到 Azure 存储或 Azure Data Lake Storage 中的图像

备注

将事件中心捕获配置为使用 Azure Data Lake Storage Gen 2 的方法与将其配置为使用 Azure Blob 存储的方法相同。 有关详细信息,请参阅配置事件中心捕获

事件中心捕获可让用户在同一个流上处理实时和基于批处理的管道。 这意味着可以构建随着时间的推移随用户的需要增长的解决方案。 无论用户现在正在构建基于批处理的系统并着眼于将来进行实时处理,还是要将高效的冷路径添加到现有的实时解决方案,事件中心捕获都可以使流式处理数据处理更加简单。

重要

目标存储帐户必须与事件中心位于同一订阅中。

Azure 事件中心捕获的工作原理

事件中心是遥测数据入口的时间保留持久缓冲区,类似于分布式日志。 缩小事件中心的关键在于分区使用者模式。 每个分区是独立的数据段,并单独使用。 根据可配置的保留期,随着时间的推移此数据会过时。 因此,给定的事件中心永远不会装得“太满”。

使用事件中心捕获,用户可以指定自己的 Azure Blob 存储帐户和容器或 Azure Data Lake Store(用于存储已捕获数据)。 这些帐户可以与事件中心在同一区域中,也可以在另一个区域中,从而增加了事件中心捕获功能的灵活性。

已捕获数据以 Apache Avro 格式写入;该格式是紧凑、便捷的二进制格式,并使用内联架构提供丰富的数据结构。 这种格式广泛用于 Hadoop 生态系统、流分析和 Azure 数据工厂。 在本文后面提供了有关如何使用 Avro 的详细信息。

捕获窗口

使用事件中心捕获,用户可以设置用于控制捕获的窗口。 此窗口使用最小大小并具有使用“第一个获胜”策略的时间配置,这意味着遇到的第一个触发器将触发捕获操作。 如果使用 15 分钟,100 MB 的捕获窗口,且发送速度为每秒 1 MB,则大小窗口将在时间窗口之前触发。 每个分区独立捕获,并在捕获时写入已完成的块 blob,在遇到捕获间隔时针对时间进行命名。 存储命名约定如下所示:

{Namespace}/{EventHub}/{PartitionId}/{Year}/{Month}/{Day}/{Hour}/{Minute}/{Second}

日期值填充为零;示例文件名可能是:

https://mystorageaccount.blob.core.chinacloudapi.cn/mycontainer/mynamespace/myeventhub/0/2017/12/08/03/03/17.avro

如果 Azure 存储 blob 暂时不可用,事件中心捕获将在事件中心上配置的保留期内保留数据,并在存储帐户再次可用后重新填充数据。

缩放吞吐量单位或处理单位

在事件中心的标准层中,流量由吞吐量单位控制,而在事件中心的高级层中,流量由处理单位控制。 事件中心捕获直接从内部事件中心存储复制数据,从而绕过吞吐量单位或处理单位出口配额,为流分析或 Spark 等其他处理读取器节省了出口量。

配置后,用户发送第一个事件时,事件中心捕获会自动运行,并持续保持运行状态。 为了让下游处理更便于了解该进程正在运行,事件中心会在没有数据时写入空文件。 此进程提供了可预测的频率以及可以供给批处理处理器的标记。

设置事件中心捕获

可以使用 Azure 门户或使用 Azure 资源管理器模板在创建事件中心时配置捕获。 有关详细信息,请参阅以下文章:

备注

如果对现有的事件中心启用“捕获”功能,该功能将在启用后捕获到达事件中心的事件。 它不会在启用功能之前捕获事件中心中存在的事件。

浏览已捕获的文件和使用 Avro

事件中心捕获以在配置的时间窗口中指定的 Avro 格式创建文件。 可以在任何工具(例如 Azure 存储资源管理器)中查看这些文件。 可以本地下载这些文件以进行处理。

事件中心捕获生成的文件具有以下 Avro 架构:

Avro 架构

浏览 Avro 文件的简单方法是使用 Apache 中的 Avro 工具 jar。 还可以使用 Apache Drill 实现轻量级 SQL 驱动的体验或者使用 Apache Spark 对引入的数据执行复杂的分布式处理。

使用 Apache Drill

Apache Drill 是一个“用于大数据探索的开放源代码 SQL 查询引擎”,可以用来查询结构化和半结构化数据,无论数据位于何处。 该引擎可以作为独立节点或作为巨型群集运行以实现优异性能。

它原生支持 Azure Blob 存储,这使得查询 Avro 文件中的数据非常轻松,如以下文档中所述:

Apache Drill:Azure Blob 存储插件

若要轻松查询捕获的文件,可以通过容器在启用了 Apache Drill 的情况下创建和执行 VM 来访问 Azure Blob 存储。 请参阅以下示例:使用事件中心捕获功能进行大规模流式传输

使用 Apache Spark

Apache Spark 是“用于大规模数据处理的统一分析引擎”。 它支持不同的语言,包括 SQL,并且可以轻松地访问 Azure Blob 存储。 有几个选项可用来在 Azure 中运行 Apache Spark,每个选项都可以轻松访问 Azure Blob 存储:

使用 Avro 工具

Avro 工具是作为 jar 程序包提供的。 下载此 jar 文件后,可以运行以下命令来查看特定 Avro 文件的架构:

java -jar avro-tools-1.9.1.jar getschema <name of capture file>

此命令返回

{

    "type":"record",
    "name":"EventData",
    "namespace":"Microsoft.ServiceBus.Messaging",
    "fields":[
                 {"name":"SequenceNumber","type":"long"},
                 {"name":"Offset","type":"string"},
                 {"name":"EnqueuedTimeUtc","type":"string"},
                 {"name":"SystemProperties","type":{"type":"map","values":["long","double","string","bytes"]}},
                 {"name":"Properties","type":{"type":"map","values":["long","double","string","bytes"]}},
                 {"name":"Body","type":["null","bytes"]}
             ]
}

还可以使用 Avro 工具将文件转换为 JSON 格式以及执行其他处理。

若要执行更高级的处理,请下载并安装适用于所选平台的 Avro。 在撰写本文时,有可用于 C、C++、C#、Java、NodeJS、Perl、PHP、Python 和 Ruby 的实现。

Apache Avro 针对 JavaPython 提供了完整的快速入门指南。 还可以参阅事件中心捕获入门一文。

Azure 事件中心捕获的收费方式

事件中心捕获的计量方式类似于吞吐量单位(标准层)或处理单位(高级层):按小时收费。 费用直接与为命名空间购买的吞吐量单位数或处理单位数成正比。 随着吞吐量单位或处理单位的增加和减少,事件中心捕获计量也会相应地增加和减少以提供匹配的性能。 相继进行计量。 有关定价的详细信息,请参见事件中心定价

捕获不会使用流出量配额,因为它是单独计费的。

后续步骤

事件中心捕获是将数据加载到 Azure 最简单的方法。 使用 Azure Data Lake、Azure 数据工厂和 Azure HDInsight,可以执行批处理操作和其他分析,并且可以选择熟悉的工具和平台,以所需的任何规模执行。

了解如何使用 Azure 门户和 Azure 资源管理器模板启用此功能: