簡體   English   中英

如何從Kafka中收到的消息中獲取Avro模式對象?

[英]How can i get the Avro schema object from the received message in kafka?

我嘗試將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 ,之后它將確切知道哪個適用於每個主題的架構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM