Kafka schema-registry提供了一种使用通用数据协定对Kafka中的数据进行序列化和反序列化的好方法。但是,数据合同(.avsc文件)是生产者和消费者之间的粘合剂。
一旦生产者制作了.avsc文件,就可以将其检入到生产者方面的版本控制中。根据语言,它也会自动生成类。
但是
答案 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