第 7 章 在 Java 客户端中使用序列化器/反序列化器验证 Kafka 信息
Service Registry 为使用 Java 编写的 Kafka 生成者和消费者应用程序提供客户端序列化器/反序列化器(SerDes)。Kafka producer 应用程序使用序列化器来对符合特定事件模式的信息进行编码。Kafka 消费者应用程序使用 deserializers 来验证消息是否根据特定的模式 ID 使用正确的模式来序列化消息。这样可确保一致的架构使用,并有助于防止运行时出现数据错误。
本章解释了如何在生成者和消费者客户端应用程序中使用 Kafka 客户端 SerDe :
先决条件
- 您已阅了读 第 1 章 Service Registry 简介。
- 已安装 Service Registry。
您已创建了 Kafka producer 和消费者客户端应用程序。
有关 Kafka 客户端应用程序的详情,请参阅在 OpenShift 中部署和管理 AMQ Streams。
7.1. Kafka 客户端应用程序和 Service Registry
Service Registry 将模式管理与客户端应用程序配置分离。您可以通过在客户端代码中指定 URL 来启用 Java 客户端应用程序使用来自 Service Registry 的 schema。
您可以在 Service Registry 中存储模式以序列化和反序列化消息,这些消息从客户端应用程序引用,以确保它们发送和接收的消息与这些模式兼容。Kafka 客户端应用程序可以在运行时从 Service Registry 中推送或拉取其模式。
模式可以演进,您可以在 Service Registry 中定义规则,例如,确保架构更改有效,且不会破坏应用程序使用的早期版本。Service Registry 通过将修改的模式与以前的模式进行比较来检查兼容性。
Service Registry 模式技术
Service Registry 为 schema 技术提供模式 registry 支持,例如:
- Avro
- protobuf
- JSON 架构
客户端应用程序可通过 Service Registry 提供的 Kafka 客户端序列化器(SerDes)服务使用这些模式技术。Service Registry 提供的 SerDes 类的成熟度和使用可能会有所不同。以下章节提供有关每个 schema 类型的更多详情。
producer 模式配置
制作者客户端应用程序使用序列化器将它发送到特定代理主题的消息放在正确的数据格式中。
启用制作者以使用 Service Registry 进行序列化:
- 使用 Service Registry 定义并注册您的模式 (如果还没有存在)。
使用以下命令配置制作者 客户端代码:
- Service Registry 的 URL
- 用于消息的 Service Registry serializer
- 策略将 Kafka 信息映射到 Service Registry 中的 schema 工件
- 在 Service Registry 中查找或注册用于序列化的模式的策略
注册 schema 后,当启动 Kafka 和 Service Registry 时,您可以访问 schema 来格式化由制作者发送到 Kafka 代理主题的信息。或者,根据配置,生成者可以在第一次使用时自动注册 schema。
如果 schema 已存在,您可以根据 Service Registry 中定义的兼容性规则,使用 registry REST API 创建新版本。版本用于兼容性检查,作为 schema 的演进。组 ID、工件 ID 和 version 代表用于标识 schema 的唯一元组。
consumer 模式配置
消费者客户端应用程序使用反序列化器将来自特定代理主题的消息获取到正确的数据格式。
启用消费者使用 Service Registry 进行反序列化:
- 使用 Service Registry 定义并注册您的模式 (如果尚不存在)
- Service Registry 的 URL
- 用于消息的 Service Registry deserializer
- 为 deserialization 输入数据流
使用全局 ID 检索模式
默认情况下,架构通过使用全局 ID (在被消耗的消息中指定)从 Service Registry 检索。架构全局 ID 可以位于消息标头或消息有效负载中,具体取决于制作者应用的配置。
当在消息有效负载中查找全局 ID 时,数据格式以 magic 字节开头,用作消费者的信号,后跟全局 ID,以及消息数据正常。例如:
# ... [MAGIC_BYTE] [GLOBAL_ID] [MESSAGE DATA]
然后,当启动 Kafka 和 Service Registry 时,您可以访问模式来格式化从 Kafka 代理主题接收的消息。
使用内容 ID 检索模式
或者,您可以将 配置为根据内容 ID 从 Service Registry 检索模式,这是工件内容的唯一 ID。全局 ID 是工件版本的唯一 ID。
内容 ID 不唯一标识版本,而是仅唯一标识版本内容。如果多个版本共享相同的内容,它们具有不同的全局 ID,但具有相同的内容 ID。confluent Schema Registry 默认使用内容 ID。