2016-09-14 62 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