【问题标题】:How do you set Kafka Rest Proxy Key Schema with JSON values?如何使用 JSON 值设置 Kafka Rest Proxy Key Schema?
【发布时间】:2019-05-06 23:49:21
【问题描述】:

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

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

使用Content-Type: application/vnd.kafka.avro.v2+json 和key_schema type: string,键周围没有多余的引号,但我宁愿发送json值。

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

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

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

有没有办法用 json 值指定键模式,这样我的键就不会被转义引号引起来?

【问题讨论】:

    标签: apache-kafka apache-kafka-streams kafka-rest


    【解决方案1】:

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

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

    您的示例正文变为:

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

    【讨论】:

      【解决方案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

      【讨论】:

      • 谢谢,@Rohit。这与我发送的 Content-Type 相同。我添加了 Accept 标头,它仍然在我的键周围添加了转义的引号。
      猜你喜欢
      • 2020-10-20
      • 2020-10-15
      • 2021-07-01
      • 1970-01-01
      • 2018-10-11
      • 2021-03-08
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多