你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 事件中心中的架构注册表

Azure 事件中心中的架构注册表有许多优点。 架构注册表有助于维护数据一致性,简化架构演化,增强互操作性,并减少松散耦合和事件流式处理工作流中的开发工作量。 采用集中式架构存储库的大型分布式组织可以使用架构注册表来实现高度可靠的数据处理和治理,而操作开销很小。

Azure 事件中心中的架构注册表在架构驱动的事件流式处理应用场景中扮演着许多角色:

  • 提供存储库,可以在其中注册、管理和演化多个架构
  • 使用多种兼容性规则管理架构演化
  • 对所有架构化数据执行数据验证
  • 为制作者和消费者提供客户端库(序列化程序和反序列化程序)
  • 通过为每个有效负载传递架构 ID(而非架构定义)来提高网络吞吐量效率

Azure 事件中心中的架构注册表在标准、高级和专用层上受支持。

架构注册表组件

架构注册表是事件中心命名空间的一部分,但也可以与其他消息或事件代理一起使用,包括 Azure 消息服务。 它由多个架构组组成,这些架构组充当架构的逻辑分组,可以独立于其他架构组进行管理。

关系图,显示 Azure 事件中心中架构注册表组件。

架构

在任何松散耦合的系统中,多个应用主要通过数据进行通信。 架构以声明性的方式定义数据的结构。 因此,制作者和消费者应用之间的合约得到了很好的定义,确保了大规模的可靠处理。

架构定义包含:

  • 字段:个人数据元素,如姓名、书名或地址。
  • 数据类型:可以存储的数据类型,如字符串、日期时间或数组。
  • 结构:字段的组织方式,如嵌套结构或数组。

架构定义了生成者与使用者之间的协定。 事件中心架构注册表中定义的架构有助于管理事件数据之外的合约,从而消除了有效负载开销。

架构格式

架构格式用于确定构造和定义架构的方式。 每种格式都概述了定义用于事件流式处理的事件结构的具体准则和语法。

Avro 架构

Apache Avro 是常用的数据序列化系统,它使用紧凑的二进制格式并提供架构演化功能。

要了解有关在事件中心架构注册表中使用 Avro 架构格式的更多信息,请参阅:

JSON 架构

JSON (JavaScript 对象表示法) 架构是定义事件结构和数据类型的标准化方法。 JSON 架构支持在事件流式处理中自信可靠地使用 JSON 数据格式。

要了解有关将 JSON 架构格式与事件中心架构注册表搭配使用的更多信息,请参阅如何将架构注册表与 Kafka 和 JSON 架构搭配使用

协议缓冲区

协议缓冲区 (Protobuf) 是一种中性语言、平台中立的可扩展机制,用于序列化结构化数据。 它用于有效地定义数据结构,并将其序列化为压缩的二进制格式。

架构组

架构组是根据贵商务条件组织的类似架构的逻辑组。 架构组具有:

  • 多个架构定义。
  • 特定架构的多个版本。
  • 关于组中所有架构的架构类型和兼容性的元数据。

可以将架构组视为架构注册表的子集,它与特定的应用或组织单位对齐,具有单独的授权模型。 此额外的安全边界有助于确保元数据和商业机密不会在共享服务模型中泄露。 它还允许应用所有者独立于共享相同命名空间的其他应用来管理架构。

架构演变

架构需要根据生成者和使用者的业务要求而演变。 架构注册表通过在架构组级别引入兼容性架构来支持架构演化。 创建架构组时,可以指定要包含在该架构组中的架构的兼容性模式。 更新架构时,更改需要符合已分配兼容性模式,以便其创建架构的新版本。

仅 Avro 架构格式支持架构演化。

以下兼容性模式支持架构注册表。

后向兼容性

后向兼容性模式允许消费者代码使用新版本的架构,并使用旧版本的架构处理消息。 后向兼容性模式允许对架构进行以下更改:

  • 删除字段
  • 添加可选字段

向前兼容性

前向兼容性允许消费者代码使用旧架构版本,并使用新架构读取消息。 前向兼容性模式允许对架构进行以下更改:

  • 添加字段
  • 删除可选字段

无兼容性

当使用 None 兼容性模式时,架构注册表在更新架构时不会进行任何兼容性检查。

客户端 SDK

可以使用以下库之一来包含 Avro 序列化程序。 可以使用 Avro 序列化程序来序列化和反序列化包含架构注册表的架构标识符和 Avro 编码数据的有效负载:

编程语言 SDK 中 IsInRole 中的声明 示例
。网 Microsoft.Azure.Data.SchemaRegistry.ApacheAvro .NET 示例
爪哇岛 azure-data-schemaregistry-avro Java 示例
azure-schemaregistry-avroserializer Python 示例
JavaScript @azure/schema-registry-avro Node.js 示例

此外,以下库也可用(根据您的工作负载)。

  • Apache Kafka:运行由架构注册表支持的 Kafka 集成 Avro 序列化程序和反序列化程序。 Java 客户端的 Apache Kafka 客户端序列化程序可用于任何 Apache Kafka 应用场景,也可用于任何基于 Apache Kafka 的部署或云服务。
  • Azure CLI:有关使用 Azure CLI 将架构添加到架构组的示例,请参阅使用 Azure CLI 向架构组添加架构
  • PowerShell:有关使用 PowerShell 向架构组添加架构的示例,请参阅使用 PowerShell 向架构组添加架构

限制

有关事件中心的限制(如命名空间中可以使用的架构数量),请参阅事件中心配额和限制

Azure 基于角色的访问控制

若要以编程方式访问架构注册表,请执行以下步骤:

  1. 在 Microsoft Entra ID 中注册应用
  2. 将应用的安全主体添加到命名空间级别的以下 Azure 基于角色的访问控制 (RBAC) 角色之一。
角色 描述
所有者 读取、写入和删除架构注册表组和架构
参与者 读取、写入和删除架构注册表组和架构
架构注册表读取者 读取和列出架构注册表组和架构
架构注册表参与者 读取、写入和删除架构注册表组和架构

要了解如何使用 Azure 门户创建和注册应用,请参阅使用 Microsoft Entra ID 注册应用。 需要在代码中使用客户端 ID(应用 ID)、租户 ID 和机密。