如何从 kafka 中收到的消息中获取 Avro 模式对象?
How can i get the Avro schema object from the received message in kafka?
我尝试 publish/consume 我的 java 对象到 kafka。我使用 Avro 模式。
我的基本程序运行良好。在我的程序中,我在生产者(编码)和消费者(解码)中使用我的模式。
如果我在接收方将不同的对象发布到不同的主题(例如:100 个主题),我不知道我收到的是什么类型的消息?...我想从接收到的字节中获取 avro 模式,并且想用它来解码..
我的理解正确吗?如果是这样,我如何从接收到的对象中检索?
您不会在接收到的字节中收到 Avro 架构——而且您真的不想这样做。 Avro 的整个想法是将模式与记录分开,因此它是一种更加紧凑的格式。我这样做的方式是,我有一个名为 Schema
的主题。 Kafka 消费者进程做的第一件事是从头开始收听此主题并解析所有模式。
Avro 模式只是 JSON
字符串对象 -- 您可以在 Schema
主题中为每条记录存储一个模式。
关于确定哪个模式与哪个主题相关,正如我在 中所说,您需要每个主题一个模式,仅此而已。因此,当您解析来自特定主题的消息时,您确切地知道适用什么架构,因为只能有一个。
如果您从不重复使用架构,您可以将架构命名为与主题相同的名称。但是,在实践中,您可能会在多个主题上使用相同的模式。在这种情况下,您希望有一个单独的主题将模式映射到主题。您可以像这样创建 Avro 模式:
{"name":"SchemaMapping", "type":"record", "fields":[
{"name":"schemaName", "type":"string"},
{"name":"topicName", "type":"string"}
]}
您将为每个主题发布一条记录,并将您的 Avro 编码映射到一个特殊主题——例如称为 SchemaMapping
——并且在从头开始使用 Schema
主题后,一个消费者会收听 SchemaMapping
,然后它会确切地知道为每个主题应用哪个模式。
我尝试 publish/consume 我的 java 对象到 kafka。我使用 Avro 模式。
我的基本程序运行良好。在我的程序中,我在生产者(编码)和消费者(解码)中使用我的模式。
如果我在接收方将不同的对象发布到不同的主题(例如:100 个主题),我不知道我收到的是什么类型的消息?...我想从接收到的字节中获取 avro 模式,并且想用它来解码.. 我的理解正确吗?如果是这样,我如何从接收到的对象中检索?
您不会在接收到的字节中收到 Avro 架构——而且您真的不想这样做。 Avro 的整个想法是将模式与记录分开,因此它是一种更加紧凑的格式。我这样做的方式是,我有一个名为 Schema
的主题。 Kafka 消费者进程做的第一件事是从头开始收听此主题并解析所有模式。
Avro 模式只是 JSON
字符串对象 -- 您可以在 Schema
主题中为每条记录存储一个模式。
关于确定哪个模式与哪个主题相关,正如我在
如果您从不重复使用架构,您可以将架构命名为与主题相同的名称。但是,在实践中,您可能会在多个主题上使用相同的模式。在这种情况下,您希望有一个单独的主题将模式映射到主题。您可以像这样创建 Avro 模式:
{"name":"SchemaMapping", "type":"record", "fields":[
{"name":"schemaName", "type":"string"},
{"name":"topicName", "type":"string"}
]}
您将为每个主题发布一条记录,并将您的 Avro 编码映射到一个特殊主题——例如称为 SchemaMapping
——并且在从头开始使用 Schema
主题后,一个消费者会收听 SchemaMapping
,然后它会确切地知道为每个主题应用哪个模式。