如何从kafka中收到的消息中获取avro模式对象?

lf5gs5x2  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(282)

我尝试向kafka发布/使用java对象。我使用avro模式。
我的基本程序很好用。在我的程序中,我在生产者(编码)和消费者(解码)中使用我的模式。
如果我在接收端将不同的对象发布到不同的主题(例如:100个主题),我不知道,我收到了什么类型的消息?。我想从收到的字节中获取avro模式,并想用它来解码。。我的理解正确吗?如果是,如何从接收到的对象中检索?

quhf5bfb

quhf5bfb1#

您将不会在接收到的字节中接收avro模式——而且您也不是真的想这样做。avro的整体思想是将模式与记录分开,这样它的格式就更紧凑了。我这样做,我有一个主题叫 Schema . Kafka消费过程要做的第一件事就是从一开始就听这个主题,并解析所有的模式。
avro模式只是 JSON 字符串对象——您可以在 Schema 主题。
至于找出哪个模式与哪个主题相匹配,正如我在前面的回答中所说的,每个主题只需要一个模式,不需要更多。因此,当您解析来自特定主题的消息时,您确切地知道应用了什么模式,因为只有一个模式。
如果您从不重复使用模式,您可以将模式命名为与主题相同的名称。但是,在实践中,您可能会在多个主题上使用相同的模式。在这种情况下,您需要一个单独的主题来将模式Map到主题。您可以创建如下avro模式:

{"name":"SchemaMapping", "type":"record", "fields":[
  {"name":"schemaName", "type":"string"},
  {"name":"topicName", "type":"string"}
]}

您可以使用avro编码的Map将每个主题发布一条记录到一个特殊的主题中,例如 SchemaMapping --在吃了这些食物之后 Schema 从一开始,消费者就会听 SchemaMapping 之后,它将确切地知道对每个主题应用哪个模式。

相关问题