Используйте kafka-avro-console-продюсер со схемой, уже находящейся в реестре схем

Я хотел бы использовать kafka-avro-console-producer с реестром схем. У меня большие схемы (более 10 тысяч символов), и я не могу передать их в качестве аргумента командной строки. Кроме того, я хотел бы использовать реестр схем напрямую, чтобы использовать конкретный идентификатор схемы.

Я думаю о таком, но не получается:

kafka-avro-console-producer \
 --broker-list <broker-list> \
 --topic <topic>  \
 --property schema.registry.url=http://localhost:8081 \
 --property value.schema=`curl http://localhost:8081/schemas/ids/419`

person 0x26res    schedule 03.01.2020    source источник
comment
То, что вы написали, выглядит нормально. Что выводит команда curl сама по себе? Это отрезано?   -  person OneCricketeer    schedule 04.01.2020
comment
Это не обрезано, но мне кажется, что внутренние полезные данные - это строки, а не вложенные объекты json (обратите внимание на обратную косую черту перед цитатой): {"schema":"{\"type\":\"record\",\"name\":\".... Также у моей схемы есть документ, содержащий одинарные и двойные кавычки, а также *, который странно интерпретируется bash.   -  person 0x26res    schedule 06.01.2020
comment
Вам нужно скачать jq, тогда можно использовать curl http://localhost:8081/schemas/ids/419 | jq .schema   -  person OneCricketeer    schedule 06.01.2020
comment
Интересно, но схема по-прежнему представляет собой строку, а не объект json: {\"type\":\"record\",\"name\":\". Мне пришлось бы разобрать его и снова сбросить как json   -  person 0x26res    schedule 06.01.2020
comment
Хорошо, мне нужно curl http://localhost:8081/schemas/ids/419 | jq -r .schema. У меня все еще проблема, потому что * добавлены к содержимому текущего каталога.   -  person 0x26res    schedule 06.01.2020
comment
Откуда ты *? Можешь попробовать value.schema="$(curl http://localhost:8081/schemas/ids/419 | jq -r .schema)"? По сути, вам нужно как-то процитировать *   -  person OneCricketeer    schedule 06.01.2020
comment
Работает, спасибо. * взяты из комментариев стиля java в схеме, например: /** */   -  person 0x26res    schedule 07.01.2020


Ответы (2)


Для текущей версии инструмента CLI

kafka-avro-console-producer \
 --broker-list <broker-list> \
 --topic <topic>  \
 --property schema.registry.url=http://localhost:8081 \
 --property value.schema.id=419

Для более старой версии

Вам нужно будет извлечь схему из запроса API с помощью jq, например

value.schema="$(curl http://localhost:8081/schemas/ids/419 | jq -r .schema)"
person OneCricketeer    schedule 07.01.2020
comment
Это работает нормально, но, как ни странно, в одной из моих тем я получаю InvalidConfigurationException: регистрируемая схема несовместима с более ранней схемой; код ошибки: 409, что не имеет смысла, поскольку я специально не регистрирую какую-либо схему, а использую существующую. - person cen; 05.03.2021
comment
@cen Вы используете файл или свойство ID? Я бы ожидал этой ошибки только при использовании файла - person OneCricketeer; 05.03.2021
comment
ID собственности. Вот что делает это странным. - person cen; 05.03.2021

Вы можете использовать свойство value.schema.id:

kafka-avro-console-producer \
 --broker-list <broker-list> \
 --topic <topic>  \
 --property schema.registry.url=http://localhost:8081 \
 --property value.schema.id=419
person mathiasfk    schedule 30.09.2020
comment
Спасибо за ваше предложение. К сожалению, это не работает с моей версией kafka-avro-console-producer, я подозреваю, что она слишком старая и не поддерживает ее. - person 0x26res; 23.10.2020
comment
Где я могу найти все доступные свойства для kafka-avro-console-producer и kafka-avro-console-consumer? Я не сделал этого в официальных документах - person ZZa; 12.02.2021
comment
@zza Вы должны иметь возможность передавать --help обеим командам - person OneCricketeer; 12.02.2021
comment
Да, но --help не предоставляет вам свойства, доступные для настройки, там упоминается только сам параметр --property, а также на странице примеров, упомянутой выше, были продемонстрированы только некоторые свойства. Поэтому я спросил, где, т.е. вы узнали о свойстве value.schema.id, потому что оно нигде не упоминалось - person ZZa; 14.02.2021
comment
@ZZa лично, я просмотрел PR для этой функции, и код имеет открытый исходный код, так что вы можете найти его там ... Я не уверен насчет документации или вывода справки - person OneCricketeer; 05.03.2021