Как настроить схему ключей прокси-сервера Kafka Rest со значениями JSON? - PullRequest
2 голосов
/ 07 мая 2019

Я использую Kafka 1.1 и Kafka Rest Proxy 4.1.2. Я копировал записи из потоков Кафки, используя строковые ключи. Я хочу использовать Rest Proxy для вставки записей, которые нужно объединить, но на ключах ставятся экранированные кавычки.

Я отправляю POST запрос на /topics/{someTopic} с Content-Type: application/vnd.kafka.json.v2+json, который вызывает проблему.

При Content-Type: application/vnd.kafka.avro.v2+json и типе key_schema: string ключи не имеют дополнительных кавычек вокруг них, но я бы лучше отправил значения json.

Это то, что я отправляю на конечную точку /topics.

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

Когда я передаю данные в потоках Кафки, ключ получается как \"abc\" и, очевидно, не объединяется с записями со строковыми ключами abc.

Есть ли способ указать схему ключей со значениями json, чтобы мои ключи не получали экранированных кавычек вокруг них?

Ответы [ 2 ]

1 голос
/ 07 мая 2019

При использовании заголовка Content-Type: application/vnd.kafka.json.v2+json ключ JSON будет экранировать кавычки вокруг всех строк, чтобы он должным образом десериализовался в приложении потоков. При использовании простого ключа строки, похоже, экранируются в кавычках, а числовые ключи не изменяются.

Content-Type: application/vnd.kafka.binary.v2+json будет генерировать ваши пары ключ-значение в точности так, как вы их даете, без добавления экранированных кавычек к строковым ключам. Вам просто нужно base64 кодировать ваши ключи и значения.

Ваше тело примера становится:

{
    "records": [{
        "key": "YWJj",
        "value": "eyJhbmltYWwiOiJkb2cifQ=="
    }]
}
0 голосов
/ 07 мая 2019

Согласно документам Kafka, формат сообщения правильный для json. Я думаю, вы должны попробовать следующий заголовок сообщения.

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

Я бы предложил вам просмотреть следующий документ Кафки.

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

...