我尝试向kafka发布/使用java对象。我使用avro模式。我的基本程序很好用。在我的程序中,我在生产者(编码)和消费者(解码)中使用我的模式。如果我在接收端将不同的对象发布到不同的主题(例如:100个主题),我不知道,我收到了什么类型的消息?。我想从收到的字节中获取avro模式,并想用它来解码。。我的理解正确吗?如果是,如何从接收到的对象中检索?
quhf5bfb1#
您将不会在接收到的字节中接收avro模式——而且您也不是真的想这样做。avro的整体思想是将模式与记录分开,这样它的格式就更紧凑了。我这样做,我有一个主题叫 Schema . Kafka消费过程要做的第一件事就是从一开始就听这个主题,并解析所有的模式。avro模式只是 JSON 字符串对象——您可以在 Schema 主题。至于找出哪个模式与哪个主题相匹配,正如我在前面的回答中所说的,每个主题只需要一个模式,不需要更多。因此,当您解析来自特定主题的消息时,您确切地知道应用了什么模式,因为只有一个模式。如果您从不重复使用模式,您可以将模式命名为与主题相同的名称。但是,在实践中,您可能会在多个主题上使用相同的模式。在这种情况下,您需要一个单独的主题来将模式Map到主题。您可以创建如下avro模式:
Schema
JSON
{"name":"SchemaMapping", "type":"record", "fields":[ {"name":"schemaName", "type":"string"}, {"name":"topicName", "type":"string"} ]}
您可以使用avro编码的Map将每个主题发布一条记录到一个特殊的主题中,例如 SchemaMapping --在吃了这些食物之后 Schema 从一开始,消费者就会听 SchemaMapping 之后,它将确切地知道对每个主题应用哪个模式。
SchemaMapping
1条答案
按热度按时间quhf5bfb1#
您将不会在接收到的字节中接收avro模式——而且您也不是真的想这样做。avro的整体思想是将模式与记录分开,这样它的格式就更紧凑了。我这样做,我有一个主题叫
Schema
. Kafka消费过程要做的第一件事就是从一开始就听这个主题,并解析所有的模式。avro模式只是
JSON
字符串对象——您可以在Schema
主题。至于找出哪个模式与哪个主题相匹配,正如我在前面的回答中所说的,每个主题只需要一个模式,不需要更多。因此,当您解析来自特定主题的消息时,您确切地知道应用了什么模式,因为只有一个模式。
如果您从不重复使用模式,您可以将模式命名为与主题相同的名称。但是,在实践中,您可能会在多个主题上使用相同的模式。在这种情况下,您需要一个单独的主题来将模式Map到主题。您可以创建如下avro模式:
您可以使用avro编码的Map将每个主题发布一条记录到一个特殊的主题中,例如
SchemaMapping
--在吃了这些食物之后Schema
从一开始,消费者就会听SchemaMapping
之后,它将确切地知道对每个主题应用哪个模式。