在架构注册表中存储Avro架构

sku*_*erk 3 avro apache-kafka

我正在使用Confluent的JDBC连接器以Avro格式将数据发送到Kafka.我需要将此架构存储在架构注册表中,但我不确定它接受的格式.我在这里阅读了文档,但没有提到太多.

我试过这个(将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
Run Code Online (Sandbox Code Playgroud)

但我得到错误:{"error_code":422,"message":"无法识别的字段:类型"}

小智 9

您作为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
Run Code Online (Sandbox Code Playgroud)

我对命令做了两个其他更改:

  • 我已经在模式键的值内转义了每个双引号.
  • 我已经将struct数据结构更改为string.我不知道为什么它不采取复杂的结构.

对于文档中描述的第一个POST请求,请查看他们如何在此处为模式建模.

  • 谢谢,我认为这实际上是正确答案,至少它帮助了我 (3认同)

Gwe*_*ira 0

首先,是否需要提前存储schema?如果您将 JDBC 连接器与 Avro 转换器(它是架构注册表包的一部分)一起使用,则 JDBC 连接器将从数据库中找出表的架构并为您注册。您需要在 KafkaConnect 配置文件中指定转换器。您可以以此为例: https: //github.com/confluenceinc/schema-registry/blob/master/config/connect-avro-standalone.properties

如果您确实想自己注册架构,则问题可能出在 shell 命令上 - 在 shell 中转义 JSON 很棘手。我在 Chrome 中安装了 Advanced Rest Client,并使用它来处理架构注册表和 KafkaConnect 的 REST API。