9.4. 查找模式的策略
Kafka 客户端 serializer/deserializer 使用 Service Registry 策略 来确定在 Service Registry 中注册消息 schema 的工件 ID 或全局 ID。
对于给定的主题和消息,您可以使用以下 Java 类的实施:
-
ArtifactIdStrategy
返回工件 ID -
GlobalIdStrategy
返回一个全局 ID
返回的工件 ID 取决于消息中的 键 或 值 是否被序列化。
每个 策略 的类组织在io. apicurio.registry.utils.serde.strategy
软件包中。
默认策略是 TopicIdStrategy
,它查找名称与 Kafka 主题接收消息相同的 Service Registry 工件。
例如:
public String artifactId(String topic, boolean isKey, T schema) { return String.format("%s-%s", topic, isKey ? "key" : "value"); }
-
topic
参数是接收消息的 Kafka 主题的名称。 -
当消息键被序列化时,
isKey
参数为 true,消息值被序列化时为 false。 -
schema
参数是消息被序列化/deserialized 的 schema。 -
返回的
artifactID
是架构在服务注册表中注册的 ID。
您使用什么查找策略取决于您架构的存储方式和位置。例如,如果您具有具有相同 Avro 消息类型的不同 Kafka 主题,您可以使用使用 记录 ID 的策略。
返回工件 ID 的策略
基于 ArtifactIdStrategy
实施返回工件 ID 的策略。
RecordIdStrategy
- 使用架构完整名称的 Avro 特定策略。
TopicRecordIdStrategy
- 使用主题名称和架构全名的 Avro 特定策略。
TopicIdStrategy
-
(默认)使用主题名称和
键
或值
后缀的策略。 SimpleTopicIdStrategy
- 仅使用该主题名称的简单策略.
返回全局 ID 的策略
基于 GlobalIdStrategy
实施返回全球 ID 的策略。
FindLatestIdStrategy
- 根据工件 ID 返回最新 schema 版本的全局 ID 的策略。
FindBySchemaIdStrategy
- 匹配架构内容(基于工件 ID)的策略,以返回全局 ID。
GetOrCreateIdStrategy
- 尝试根据工件 ID 获取最新架构的策略,如果不存在,则会创建一个新架构。
AutoRegisterIdStrategy
- 更新架构的策略,并使用更新的 schema 的全局 ID。