3

我正在使用 Kafka 1.1 和 Kafka Rest Proxy 4.1.2。我一直在使用字符串键从 Kafka 流中键入记录。我想使用 Rest Proxy 插入要加入的记录,但是键被转义的引号放在它们周围。

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

和key_schemaContent-Type: application/vnd.kafka.avro.v2+json类型:字符串,键周围没有多余的引号,但我宁愿发送 json 值。

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

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

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

有没有办法用 json 值指定一个键模式,这样我的键就不会在它们周围得到转义引号?

4

2 回答 2

2

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

   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

于 2019-05-07T15:35:03.213 回答
2

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

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

您的示例正文变为:

{
    "records": [{
        "key": "YWJj",
        "value": "eyJhbmltYWwiOiJkb2cifQ=="
    }]
}
于 2019-05-07T19:14:25.823 回答