AWS Glue 架构注册表 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS Glue 架构注册表

架构注册表是一项新功能,让您可以集中发现、控制和发展数据流架构。AWS Glue架构 定义数据记录的结构和格式。借助 AWS Glue 架构注册表,您可以使用与 Apache Kafka、Amazon Managed Streaming for Apache KafkaAmazon Kinesis Data StreamsAmazon Kinesis Data Analytics for Apache FlinkAWS Lambda 的便捷集成,在数据流应用程序上管理和实施架构。

架构注册表支持 AVRO 数据格式和 Java 语言支持,并提供了其他数据格式和语言。AWS Glue支持的功能包括兼容性、通过元数据获取架构源、自动注册架构、IAM 兼容性以及可选的 ZLIB 压缩以减少存储和数据传输。AWS Glue架构注册表是无服务器的,可供使用。

使用架构作为创建者和使用者之间的数据格式合同能够改善数据监管,提高数据质量,并让数据使用者能够灵活应对兼容的上游更改。

架构注册表允许不同的系统共享架构以进行序列化和反序列化。例如,假设您有一个数据创建者和使用者。创建器在发布数据时知道架构。架构注册表为某些系统(如 Amazon MSK 或 Apache Kafka)提供了串行器和解串器。

有关更多信息,请参阅架构注册表的工作方式

Schemas

架构 定义数据记录的结构和格式。架构是可靠数据发布、使用或存储的受版本控制的规范。

在 Avro 的此示例架构中,格式和结构由布局和字段名称定义,字段名称的格式由数据类型定义(例如,stringint)。

{ "type": "record", "namespace": "ABC_Organization", "name": "Employee", "fields": [ { "name": "Name", "type": "string" }, { "name": "Age", "type": "int" }, { "name": "address", "type": { "type": "record", "name": "addressRecord", "fields": [ { "name": "street", "type": "string" }, { "name": "zipcode", "type": "integer" } ] } } ] }

Registries

注册表 是架构的逻辑容器。注册表允许您组织架构以及管理应用程序的访问控制。注册表具有 Amazon 资源名称 (ARN),允许您在注册表内组织和设置对架构操作的不同访问权限。

您可以使用默认注册表或根据需要创建任意数量的新注册表。

  • RegistryName:[string]

    • RegistryArn:[AWS ARN]

    • CreatedTime:[timestamp]

    • UpdatedTime:[timestamp]

  • SchemaName:[string]

    • SchemaArn:[AWS ARN]

    • DataFormat:[Avro]

    • 兼容性:[例如 BACKWARD、BACKWARD_ALL、FORWARD、FORWARD_ALL、FULL、FULL_ALL、NONE、DISABLED]

    • 状态:[例如 PENDING、AVAILABLE、DELETING]

    • SchemaCheckpoint:[integer]

    • CreatedTime:[timestamp]

    • UpdatedTime:[timestamp]

  • SchemaVersion:[string]

    • SchemaVersionNumber:[integer]

    • 状态:[例如 PENDING、AVAILABLE、DELETING、FAIURE]

    • SchemaDefinition:[string, Value: JSON]

    • CreatedTime:[timestamp]

  • SchemaVersionMetadata:[list]

    • MetadataKey:[string]

    • 元数据信息

    • MetadataValue:[string]

    • CreatedTime:[timestamp]

架构版本控制和兼容性

每个架构可以有多个版本。版本控制由在架构上应用的兼容性规则进行管理。注册表将针对此规则检查注册新架构版本的请求,然后它们才能成功。

标记为检查点的架构版本用于确定注册架构新版本的兼容性。在首次创建架构时,默认检查点将成为第一个版本。随着架构随着版本不断变化,您可以使用 CLI/开发工具包,通过 UpdateSchema API 将检查点更改为符合一组约束的架构版本。在控制台中,在默认情况下,编辑架构定义或兼容性模式会将检查点更改为最新版本。

兼容性模式允许您控制架构如何可以或不能随时间演变。这些模式构成了生成和使用数据的应用程序之间的合同。在将架构的新版本提交到注册表后,将使用该架构名称的兼容性规则来确定是否可以接受新版本。兼容性模式有 8 种:NONE、DISABLED、BACKWARD、BACKWARD_ALL、FORWARD、FORWARD_ALL、FULL、FULL_ALL。

在 Avro 数据格式中,字段可能是可选的,也可能是必需的。可选字段是 Type 包含 null 的字段。必填字段没有 null 作为 Type

  • NONE:无兼容性模式适用。您可以在开发场景中使用此选项,或者,如果您不知道要应用于架构的兼容性模式。任何添加的新版本都将被接受,而无需进行兼容性检查。

  • DISABLED:此兼容性选项可防止特定架构的版本控制。无法添加新版本。

  • BACKWARD:建议使用此兼容性选项,因为它允许使用者读取当前和以前的架构版本。在删除字段或添加可选字段时,您可以使用此选项检查与以前的架构版本的兼容性。BACKWARD 的一个典型使用案例是,为最新架构创建了应用程序之后。

    例如,假设您有一个由名字(必需)、姓氏(必需)、电子邮件(必需)和电话号码(可选)定义的架构。

    如果您的下一个架构版本删除了所需的电子邮件字段,这将成功注册。BACKWARD 兼容性要求使用者能够读取当前和以前的架构版本。您的使用者将能够读取新架构,因为将忽略旧消息中的额外电子邮件字段。

    如果您建议添加必填字段(例如邮政编码)的新架构版本,则这不会成功注册到 BACKWARD 兼容性。新版本的使用者将无法在架构更改前读取旧消息,因为它们缺少必需的邮政编码字段。但是,如果在新 schema 中将 zip 代码字段设置为可选,则建议的版本将成功注册,因为使用者可以读取旧 schema 而不使用可选 zip 代码字段。

  • BACKWARD_ALL:此兼容性选项允许使用者读取当前和所有之前的架构版本。在删除字段或添加可选字段时,您可以使用此选项检查与所有先前架构版本的兼容性。

  • FORWARD:此兼容性选项允许使用者读取当前和后续架构版本,但不一定是更高版本。在添加字段或删除可选字段时,您可以使用此选项检查与最后一个架构版本的兼容性。FORWARD 的一个典型使用案例是,为以前的架构创建了应用程序并且应该能够处理更新的架构。

    例如,假设您有一个由名字(必需)、姓氏(必需)、电子邮件(可选)定义的架构版本。

    如果您有添加必填字段(例如电话号码)的新架构版本,这将成功注册。FORWARD 兼容性要求使用者能够使用先前版本读取利用新架构生成的数据。

    如果您提议的架构版本删除了所需的名字字段,这不会成功注册到 FORWARD 兼容性。早期版本的使用者将无法读取建议的架构,因为它们缺少所需的名字字段。但是,如果第一个名称字段最初是可选的,则提议的新架构将成功注册,因为使用者可以根据没有可选的第一个名称字段的新架构读取数据。

  • FORWARD_ALL:这种兼容性选择允许使用者读取由任何新的已注册架构的创建者写入的数据。当您需要添加字段或删除可选字段并检查与所有先前架构版本的兼容性时,可以使用此选择。

  • FULL:此兼容性选项允许使用者读取创建者使用架构的上一个或下一个版本写入的数据,但不允许读取更早或更高版本的数据。在添加或删除可选字段时,您可以使用此选项检查与最后一个架构版本的兼容性。

  • FULL_ALL:此兼容性选项允许使用者读取创建者使用之前的所有架构版本写入的数据。在添加或删除可选字段时,您可以使用此选项检查所有之前的架构版本的兼容性。

开源 Serde 库

AWS 提供了开源 Serde 库作为序列化和反序列化数据的框架。这些库的开源设计允许常见的开源应用程序和框架在其项目中支持这些库。

有关 Serde 库工作原理的更多详细信息,请参阅架构注册表的工作方式

架构注册表的配额

配额在 AWS 中也称为限制,是您的 AWS 账户中资源、操作和项目的最大值。以下是 AWS Glue 中架构注册表的软性限制。

Registries

每个 AWS 区域每个 AWS 账户最多可拥有 10 个注册表。

SchemaVersion

每个 AWS 区域每个 AWS 账户最多可拥有 1000 个架构版本。

每个新架构都会创建一个新的架构版本,因此,如果每个架构只有一个版本,则理论上每个区域每个账户最多可以有 1000 个架构。

架构版本元数据键/值对

每个 AWS 区域每个 SchemaVersion 最多可拥有 10 个键/值对。

您可以使用 QuerySchemaVersionMetadata 操作PutSchemaVersionMetadata 操作 API 查看或设置键/值元数据对。