如何使用 JSON 值设置 Kafka Rest Proxy Key Schema?

How do you set Kafka Rest Proxy Key Schema with JSON values?

我正在使用 Kafka 1.1 和 Kafka Rest Proxy 4.1.2。我一直在使用 String 键从 Kafka 流内部键入记录。我想使用 Rest Proxy 插入要连接的记录,但键周围的引号被转义了。

我正在用 Content-Type: application/vnd.kafka.json.v2+json/topics/{someTopic} 发送 POST 请求,这导致了问题。

对于 Content-Type: application/vnd.kafka.avro.v2+json 和 key_schema 类型:字符串,键周围没有额外的引号,但我宁愿发送 json 值。

这是我要发送到 /topics 端点的内容。

{
    "records": [
        { 
            "key": "abc", 
            "value": {"animal": "dog"} 
        }
    ]
}

当我在 Kafka 流中传输数据时,密钥以 \"abc\" 的形式出现,并且显然没有与具有字符串键 abc.

的记录连接

有没有一种方法可以指定具有 json 值的键架构,这样我的键就不会在它们周围出现转义引号?

根据 Kafka 文档,json 的消息格式是正确的。我认为,您应该尝试使用以下消息 header。

   Content-Type: application/vnd.kafka.json.v2+json
   Accept: application/vnd.kafka.v2+json, application/vnd.kafka+json, application/json

我建议您阅读以下 Kafka 文档。

https://docs.confluent.io/current/kafka-rest/api.html

当使用 Content-Type: application/vnd.kafka.json.v2+json header 时,JSON 键将在所有字符串周围转义引号,以便它在流应用程序中正确反序列化。使用简单键时,字符串似乎确实被转义引用,而数字键未被修改。

Content-Type: application/vnd.kafka.binary.v2+json 将完全按照您提供的方式生成键值对,而无需向字符串键添加转义引号。您只需要对您的键和值进行 base64 编码。

您的示例 body 变为:

{
    "records": [{
        "key": "YWJj",
        "value": "eyJhbmltYWwiOiJkb2cifQ=="
    }]
}