8.3.3. 使用 Service Registry 配置 Protobuf SerDes
本主题解释了如何在 Google Protobuf 使用 Kafka 客户端序列化r 和 deserializer (SerDes)类。
Service Registry 为 Protobuf 提供以下 Kafka 客户端 SerDes 类:
-
io.apicurio.registry.serde.protobuf.ProtobufKafkaSerializer
-
io.apicurio.registry.serde.protobuf.ProtobufKafkaDeserializer
配置 Protobuf serializer
您可以配置 Protobuf serializer 类,如下所示:
- Service Registry URL
- 工件解析器策略
- ID 位置
- ID 编码
- 模式验证
有关这些配置选项的详情,请查看以下部分:
配置 Protobuf deserializer
您必须将 Protobuf deserializer 类配置为与 serializer 中的以下配置设置匹配:
- Service Registry URL
- ID 编码
配置属性名称和值与 serializer 相同。
配置 deserializer 时不需要以下选项:
- 工件解析器策略
- ID 位置
deserializer 类可以从消息中决定这些选项的值。策略并不是必需的,因为序列化器负责发送 ID 作为消息的一部分。
ID 位置是通过检查消息有效负载开始时的 magic 字节来确定的。如果找到该字节,则使用配置的处理程序从消息有效负载中读取 ID。如果没有找到音量字节,则 ID 会从邮件标头读取。
Protobuf deserializer 不会反序列化到您确切的 Protobuf Message 实现,而是改为 DynamicMessage
实例。否则,没有适当的 API 来做。
protobuf SerDes 和 artifact 引用
当使用 导入
语句的复杂 Protobuf 消息时,导入的 Protobuf 消息会作为单独的工件存储在 Service Registry 中。然后,当 Service Registry 获取主 schema 来检查 Protobuf 消息时,还会检索引用的方案,以便可以检查和序列化的完整消息模式。
例如,下表_info.proto
模式文件包含导入的 mode.proto
schema 文件:
带有导入的 .mode.proto 文件的 table_info.proto 文件
mode.proto file
在本例中,两个 Protobuf 工件存储在 Service Registry 中,一个用于 TableInfo
,另一个用于 模式
。但是,由于 Mode
是 表Info
的一部分,因此当获取 表Info
来检查 SerDes 中的消息时,模式
也会作为 表Info
引用的工件返回。