Search code examples
avroconfluent-platformconfluent-schema-registry

Schema issue with Kafka schema registry


I know I come to you with any news, but I'm stuck solving an issue that probably is my fault, indeed I can't realize what's the solution. I'm using a standalone installation of the Confluent platform (4.0.0 open source version) in order to demonstrate how to adopt the platform for a specific use case. Trying to demonstrate the value of using the schema registry I'm facing the following issue posting a new schema with Postman.

The request is:

http://host:8081/subjects/test/versions  
, method POST
, Header: Accept:application/vnd.schemaregistry.v1+json, application/vnd.schemaregistry+json, application/json
Content-Type:application/json
, Body: 
    {"schema":"{{\"namespace\":\"com.testlab\",\"name\":\"test\",\"type\":\"record\",\"fields\":[{\"name\":\"resourcepath\",\"type\":\"string\"},{\"name\":\"resource\",\"type\":\"string\"}]}}" }

The response is: {"error_code":42201,"message":"Input schema is an invalid Avro schema"}

Looking at docs and after googling a lot I'm without options. Any suggestion ? Thanks for your time R.


Solution

  • You have extra {} around the schema field.

    One way to test this is with jq

    Before

    $ echo '{"schema":"{{\"namespace\":\"com.testlab\",\"name\":\"test\",\"type\":\"record\",\"fields\":[{\"name\":\"resourcepath\",\"type\":\"string\"},{\"name\":\"resource\",\"type\":\"string\"}]}}" }' | jq '.schema|fromjson'
    jq: error (at <stdin>:1): Objects must consist of key:value pairs at line 1, column 146 (while parsing '{{"namespace":"com.testlab","name":"test","type":"record","fields":[{"name":"resourcepath","type":"string"},{"name":"resource","type":"string"}]}}')
    

    After

    $ echo '{"schema":"{\"namespace\":\"com.testlab\",\"name\":\"test\",\"type\":\"record\",\"fields\":[{\"name\":\"resourcepath\",\"type\":\"string\"},{\"name\":\"resource\",\"type\":\"string\"}]}" }' | jq  '.schema|fromjson'
    {
      "namespace": "com.testlab",
      "name": "test",
      "type": "record",
      "fields": [
        {
          "name": "resourcepath",
          "type": "string"
        },
        {
          "name": "resource",
          "type": "string"
        }
      ]
    }
    

    See my comment here about importing AVSC files so that you don't need to type out the JSON on the CLI