如何跨团队共享 avro 模式定义

Sah*_*has 2 avro apache-kafka confluent-schema-registry confluent-platform

Kafka schema-registry 提供了一种使用通用数据契约对来自 Kafka 的数据进行序列化和反序列化的好方法。然而,数据契约(.avsc 文件)是生产者和消费者之间的粘合剂。

一旦制作人制作了 .avsc 文件,就可以将其签入制作人一侧的版本控制。根据语言,它也会自动生成类。

然而,

  1. 消费者下拉模式定义以供参考的最佳机制是什么?有没有像 swaggerhub 或 avro 的典型 api 文档门户之类的东西?
  2. 如果我们使用 Confluent 平台,控制中心提供了一个 gui 来查看与主题关联的模式,但它也允许用户进行编辑。生产者和消费者团队之间将如何工作?什么会阻止消费者或任何人直接在 Confluent 平台上编辑模式?
  3. 这是我们需要使用rest-proxy自定义构建的东西吗?

mju*_*rez 6

您正在谈论使用 Avro 模式的两种不同方式:

  • 让架构注册表为您存储架构。
  • 生成.avsc文件并将其提供给下游消费者。

在第一种方法中,您的生产者将有一个.avsc文件用于序列化消息并将它们发送到 Kafka,但如果您使用模式注册表,则无需担心消费者需要实际的 Avro 定义,因为整个 Avro 模式可使用模式 id 从模式注册表中获得。您没有实际生成的类,没错,但您仍然可以“遍历”整个消息,并从中提取数据。

在第二种方法中,使用模式注册表,生产者使用一个.avsc文件将发送到 Kafka 的数据序列化为字节数组,然后该文件提供给消费者/下游应用程序,通常通过源代码控制。当然,这意味着无论何时进行架构更改,您的生产者和消费者都必须保持同步,否则您的消费者将无法读取生产者添加或修改的字段。

因此,如果您使用模式注册表,Kafka 消费者(如果配置正确)将自动拉取每条消息所需的模式,然后您可以提取所需的数据。另外,您还可以使用以下内容获取任何主题的最新架构:

  curl -X GET "http://schema-registry.company.com:8081/subjects/your_topic-value/versions/latest/schema"
Run Code Online (Sandbox Code Playgroud)

但是,如果您没有使用架构注册表,那么获取完整架构的唯一方法是访问.avsc用于序列化消息的文件,通常通过源代码控制,如上所述。然后,您还可以共享自动生成的类(如果可用),将您的消息直接反序列化为类。

有关如何与 Schema Registry 交互的更多信息,请访问文档链接:https : //docs.confluent.io/current/schema-registry/schema_registry_tutorial.html#using-curl-to-interact-with-schema-登记处

以及一些关于一般架构兼容性以及它如何在架构注册表中处理/配置的阅读 - https://docs.confluent.io/current/schema-registry/avro.html