7.2. 在 Apicurio Registry 中查找模式的策略


Kafka 客户端 serializer 使用 lookup 策略来 决定在 Apicurio Registry 中注册消息 schema 的工件 ID 和全局 ID。对于给定主题和消息,您可以使用 ArtifactReferenceResolverStrategy Java 接口的不同实现来返回对 registry 中的工件的引用。

每个策略的类位于 io.apicurio.registry.serde.strategy 软件包中。Avro SerDes 的特定策略类位于 io.apicurio.registry.serde.avro.strategy 软件包中。默认策略是 TopicIdStrategy,它查找与 Kafka 主题接收信息相同的 Apicurio Registry 工件。

Example

public ArtifactReference artifactReference(String topic, boolean isKey, T schema) {
        return ArtifactReference.builder()
                .groupId(null)
                .artifactId(String.format("%s-%s", topic, isKey ? "key" : "value"))
                .build();
Copy to Clipboard Toggle word wrap

  • topic 参数是接收消息的 Kafka 主题的名称。
  • 当消息键被序列化时,isKey 参数为 true,当消息值被序列化时为 false
  • schema 参数是消息序列化或反序列化的模式。
  • 返回的 ArtifactReference 包含在其中注册 schema 的工件 ID。

您使用的查找策略取决于您如何和存储架构的位置。例如,如果您有具有相同 Avro 消息类型的不同 Kafka 主题,您可以使用一个使用 记录 ID 的策略。

工件解析器策略

工件解析器策略提供了一种将 Kafka 主题和消息信息映射到 Apicurio Registry 中的工件的方法。映射的常见约定是将 Kafka 主题名称与 键或 组合,具体取决于 serializer 是否用于 Kafka 消息键或值。

但是,您可以使用 Apicurio Registry 提供的策略或创建一个实现 io.apicurio.registry.serde.strategy.ArtifactReferenceResolverStrategy 的自定义 Java 类,为映射使用替代约定。

返回工件引用的策略

Apicurio Registry 提供以下策略,以根据 ArtifactReferenceResolverStrategy 的实现返回对工件的引用:

RecordIdStrategy
使用模式全名的 avro 特定策略。
TopicRecordIdStrategy
avro 特定的策略,它使用主题名称和架构的完整名称。
TopicIdStrategy
默认策略,它使用主题名和 keyvalue 后缀。
SimpleTopicIdStrategy
仅使用主题名称的简单策略。

DefaultSchemaResolver 接口

默认架构解析器会查找并标识在由工件解析器策略提供的工件引用下注册的 schema 的特定版本。每个工件的每个版本都有一个全局唯一标识符,可用于检索该工件的内容。这个全局 ID 都包含在每个 Kafka 消息中,以便 deserializer 可以从 Apicurio Registry 正确获取 schema。

默认架构解析器可以查找现有工件版本,如果未找到,则可以注册一个,具体取决于使用了哪个策略。您还可以通过创建一个实现 io.apicurio.registry.resolver.SchemaResolver 的自定义 Java 类来提供自己的策略。但是,建议使用 DefaultSchemaResolver 并指定配置属性。

配置 registry 查找选项

使用 DefaultSchemaResolver 时,您可以使用应用属性配置其行为。下表显示了一些常用的示例:

Expand
表 7.1. Apicurio Registry 查找配置选项
属性类型描述默认

apicurio.registry.find-latest

布尔值

指定序列化器是否尝试为对应的组 ID 和工件 ID 在 registry 中查找最新的工件。

false

apicurio.registry.use-id

字符串

指示序列化器将指定的 ID 写入 Kafka,并指示反序列化器使用这个 ID 来查找 schema。

None

apicurio.registry.auto-register

布尔值

指定序列化器是否在 registry 中创建工件。JSON 架构序列化器不支持它。

false

apicurio.registry.check-period-ms

字符串

指定缓存全局 ID 的时间(以毫秒为单位)。如果没有配置,则每次都会获取全局 ID。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部