【问题标题】:Kafka Rest Proxy JSON schema validationKafka Rest Proxy JSON 模式验证
【发布时间】:2020-10-15 16:47:00
【问题描述】:

我想通过 Kafka Rest Proxy 生成一个 kafka 主题。我在架构注册表中创建了一个 JSON 架构,我希望所有消息都根据注册的架构进行验证,如果它们与架构不匹配,则会被拒绝。

我的架构

{
  "type": "object",
  "properties": {
    "foo": {
      "type": "string",
    },
    "bar": {
      "type": "number" 
    }
  }
}

此架构已正确注册并分配了版本 1。然后我尝试为 foo 和 bar 生成一条数据类型错误的消息,但该消息被接受。

curl --location --request POST 'http://localhost:8082/topics/test' \
--header 'Content-Type: application/vnd.kafka.jsonschema.v2+json' \
--header 'Accept: application/vnd.kafka.v2+json' \
--data-raw '{
    "value_schema_id": 1,
    "records": [
        {
            "value": {
                "foo": 10,
                "bar":"not a number"
            }
        }
    ]
}'

请注意,我正在生成具有关联架构的 test 主题,但无论如何都会接受错误消息。我还尝试添加"value_schema_id": 1 以确保有效负载中引用了架构,但仍然接受错误消息。

但是,如果我将 JSON 架构作为 value_schema 传递,它会按预期工作

{
    "value_schema": "{\"type\": \"object\",\"properties\": {\"foo\": {\"type\": \"string\"},\"bar\": {\"type\": \"number\"}}}",
    "records": [
        {
            "value": {
                "foo": "10",
                "bar": "1"
            }
        }
    ]
}

回应

{
    "error_code": 42203,
    "message": "Conversion of JSON to Object failed: Failed to convert JSON using JSON Schema: #/bar: expected type: Number, found: String"
}

问题:是否可以在生成消息时引用现有的模式 id 而不必每次都传递整个 JSON 模式?

【问题讨论】:

    标签: apache-kafka jsonschema confluent-schema-registry confluent-rest-proxy


    【解决方案1】:

    是的,这是可能的。您必须按照以下方式启用它的值、键或两者:

    confluent.value.schema.validation=true 
    confluent.key.schema.validation=true
    

    此外,您可以在 JSON 请求中指定架构的 ID。以下面为例,说明我在说什么:

    {
      "key_schema_id": 1234,
      "value_schema_id: 56789,
      "records": [
        {
          "key": "key123",
          "value": "my_simple_string_value_example"
        }
      ]
    }
    

    地点:

    key_schema_id

    是模式注册表中键模式的 ID。通过为其设置适当的值,将保证只有密钥与该 ID 标识的架构兼容的消息才会被接受。

    同样:

    value_schema_id

    是模式注册表中值模式的 ID。通过为其设置适当的值,将保证只有值符合该 ID 标识的架构的消息才会被接受。

    希望能有所帮助。

    干杯,

    爱德华多·庞佐尼

    【讨论】:

      猜你喜欢
      • 2016-04-23
      • 2016-01-30
      • 2020-10-20
      • 1970-01-01
      • 2011-06-08
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多