Azure 事件中心的架构注册表

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

Azure 事件中心中的架构注册表在架构驱动的事件流式处理方案中实现了许多角色:

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

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

模式注册表组件

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

Azure 事件中心中架构注册表组件的示意图。

Schemas

在任何松散耦合系统中,多个应用程序主要通过数据进行通信。 架构以声明性方式定义数据的结构。 因此,生成者和使用者应用程序之间的协定定义良好,可确保大规模可靠处理。

架构定义包括:

  • 字段:名称、书籍标题或地址等单个数据元素。
  • 数据类型:可以存储的数据类型,如字符串、日期时间或数组。
  • 结构:如何组织字段,例如嵌套结构或数组。

架构定义生成者和使用者之间的协定。 在事件中心架构注册表中定义的架构有助于管理外部于事件数据的协定,从而减少有效负载的开销。

架构格式

架构格式用于确定架构的结构和定义方式。 每个格式概述了定义用于事件流式处理的事件结构的特定准则和语法。

Avro 架构

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

若要详细了解如何将 Avro 架构格式与事件中心架构注册表配合使用,请参阅:

  • 如何将架构注册表与 Kafka 和 Avro 配合使用
  • 如何将架构注册表与事件中心、.NET、SDK(AMQP)和 Avro 配合使用
JSON 架构

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

若要详细了解如何将 JSON 架构格式与事件中心架构注册表配合使用,请参阅如何将架构注册表与 Kafka 和 JSON 架构配合使用。

协议缓冲区

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

模式组

架构组是按业务条件组织的类似架构的逻辑组。 架构组包含:

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

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

架构演变

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

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

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

向后兼容性

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

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

向前兼容性

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

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

无兼容性

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

客户端 SDK

可以使用以下库之一来引入 Avro 序列化程序。 可以使用 Avro 序列化器,对包含用于架构注册表的架构标识符和 Avro 编码数据的负载进行序列化和反序列化。

程序设计语言 SDK Samples
.NET Microsoft.Azure.Data.SchemaRegistry.ApacheAvro .NET 示例
爪哇岛 azure-data-schemaregistry-avro Java 示例
Python azure-schemaregistry-avroserializer Python 示例
JavaScript @azure/schema-registry-avro Node.js 示例

此外,以下库也基于工作负荷提供。

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

限制

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

Azure 基于角色的访问控制

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

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

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

  • 若要了解如何使用 Azure 门户创建架构注册表,请参阅使用 Azure 门户创建事件中心架构注册表。