2016-09-14 41 views
1

我正在使用Confluent的JDBC連接器以Avro格式將數據發送到Kafka。我需要將此模式存儲在模式註冊表中,但我不確定它接受的格式。我已閱讀文檔here,但沒有提及太多。在模式註冊表中存儲Avro模式

我已經試過這(採取的Avro輸出和粘貼 - 一個int和一個字符串字段):

curl -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json"  --data '{"type":"struct","fields":[{"type":"int64","optional":true,"field":"id"},{"type":"string","optional":true,"field":"serial"}],"optional":false,"name":"test"}' http://localhost:8081/subjects/view/versions 

,但我得到的錯誤:{「ERROR_CODE」:422,「消息」 :「無法識別的字段:類型」}

回答

0

首先,您需要預先存儲架構嗎?如果將JDBC連接器與Avro轉換器(它是模式註冊表包的一部分)一起使用,那麼JDBC連接器將從數據庫中找出表的模式併爲您註冊。您需要在KafkaConnect配置文件中指定轉換器。你可以用這個例子:https://github.com/confluentinc/schema-registry/blob/master/config/connect-avro-standalone.properties

如果你真的想自己註冊schema,shell命令有一些問題 - 在shell中轉義JSON是非常棘手的。我在Chrome中安裝了Advanced Rest Client,並使用它來處理模式註冊表和KafkaConnect的REST API。

+1

不幸的是,這並沒有回答這個問題。不過,你寫的是正確的。 – skomp

2

作爲JSON給出的模式應該以'模式'鍵開始。您提供的實際架構將爲架構

所以你的要求應該是這樣的:

curl -X POST -H "Content-Type: application/vnd.schemaregistry.v1+json"  --data '{"schema" : "{\"type\":\"string\",\"fields\":[{\"type\":\"int64\",\"optional\":true,\"field\":\"id\"},{\"type\":\"string\",\"optional\":true,\"field\":\"serial\"}],\"optional\":false,\"name\":\"test\"}"}' http://localhost:8081/subjects/view/versions 

我做了另外兩個更改命令:

  • 我逃過了模式的值中的每個雙引號鍵。
  • 我已經將結構數據結構更改爲字符串。我不確定它爲什麼不採取複雜的結構。

查看他們如何爲文檔中描述的第一個POST請求建立模式here

+0

謝謝,我認爲這實際上是正確的答案,至少它幫助了我 – skomp