Как получить все необходимые схемы Avro с учетом набора тем из реестра конфлюентных схем

Мы используем Kafka, Avro и реестр схем Avro. Учитывая набор тем, которые я хочу обсудить, есть ли способ получить все идентификаторы схемы, необходимые для декодирования сообщений, которые я получаю?

Я проверил реализацию клиента Python для Confluent и то, что он выглядит действие - это получение сообщений, получение идентификатора схемы Avro из отдельного сообщения и последующий поиск схемы в реестре схем Avro на лету.

Я ищу способ получить все схемы, необходимые до выполнения программы (т.е. вручную).


person Bastian Venthur    schedule 06.06.2018    source источник
comment
Есть ли конкретная причина, по которой вам нужна схема заранее? В частности, когда какая-либо заданная тема не соответствует записи в реестре? Как вы обнаружили, реализация десериализатора будет искать (и кэшировать) схемы по мере их чтения. Если вы действительно хотите, вы можете расширить этот класс, чтобы сохранять полученные схемы на диск по мере их чтения. Спасать их всех, когда они могут оказаться ненужными, кажется расточительным   -  person OneCricketeer    schedule 06.06.2018


Ответы (2)


Да, вы можете получить схему для любых данных темы

Остальные api

GET /subjects/(string: subject)/versions

Получите список версий, зарегистрированных по указанной теме. Тема относится к «-ключу» или «-значению» в зависимости от того, регистрируете ли вы схему ключей для этой темы или схему значений.

Как только вы получите версии схемы, вы можете получить схему для каждой версии, используя

GET /subjects/(string: subject)/versions/(versionId: version)/schema

Ссылка

https://docs.confluent.io/current/schema-registry/docs/api.html

person asolanki    schedule 06.06.2018
comment
К сожалению, Schema Registry Subjects! = Темы Kafka. Т.е. У меня есть тема Kafka, в которой публикуются сообщения с несколькими схемами Avro (все в одной теме), и мне нужно выяснить, каких из них ожидать. Я знаю, что могу просто потреблять сообщения и анализировать Avro-Schema-ID, но я хочу знать схемы до выполнения. - person Bastian Venthur; 06.06.2018
comment
@BastianVenthur: Я тоже ищу нечто подобное. Вы нашли способ получить все идентификаторы всех схем. Если да, опубликуйте здесь. Также знаете ли вы, как передать идентификатор при создании схемы? - person sparkingmyself; 13.08.2018

Вы можете получить определения схемы, доступные в вашем реестре схем, выполнив вызовы API в реестр схем, например:

завиток http: // локальный: 8081 / схемы / ids / 3

где последний номер в URL-адресе - это # ​​схема, которая вас интересует. Если у вас есть несколько типов сообщений в брокере, вы можете изменить последний # в URL-адресе, чтобы получить различные определения схемы для разных типов сообщений.

Подробные сведения о вызовах API см. По адресу: https://docs.confluent.io/3.3.0/schema-registry/docs/api.html#schemas

Это версия 3.3 объединенной платформы. Вы можете изменить его на текущий, чтобы получить текущую документацию по платформе.

person Parashar Gupta    schedule 07.07.2020
comment
Это не ответ на мой вопрос. Я хотел получить все схемы только по набору тем. Т.е. отображение идентификаторов тем- ›схем. - person Bastian Venthur; 07.07.2020
comment
Невозможно получить субъектов, сначала выполняющих вызов API, например: url -X GET localhost: 8081 / subject, а затем перебрать список, а затем для желаемого объекта получить определение схемы, запустив API-вызов, например: curl -X GET localhost: 8081 / subject / ‹INSERT SUBJECT NAME› -value / versions / latest - person Parashar Gupta; 07.07.2020