如何在团队之间共享avro模式定义

时间:2019-09-05 02:49:39

标签: apache-kafka avro confluent confluent-schema-registry

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

一旦生产者制作了.avsc文件,就可以将其检入到生产者方面的版本控制中。根据语言,它也会自动生成类。

但是

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

1 个答案:

答案 0 :(得分:4)

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

  • 具有架构注册表为您存储架构。
  • 生成.avsc文件并将其提供给下游使用者。

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

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

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

  curl -X GET "http://schema-registry.company.com:8081/subjects/your_topic-value/versions/latest/schema"

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

有关如何与Schema Registry进行交互的更多信息,以下是文档的链接:https://docs.confluent.io/current/schema-registry/schema_registry_tutorial.html#using-curl-to-interact-with-schema-registry

以及有关一般架构兼容性及其在架构注册表中的处理/配置方式的一些读物-https://docs.confluent.io/current/schema-registry/avro.html