Какова ценность реестра Avro Schema? - PullRequest
1 голос
/ 17 апреля 2019

У меня много микросервисов для чтения / записи сообщений Avro в Кафке.

Схемы отличные. Авро отлично. Но действительно ли необходим реестр схем? Это помогает централизовать схемы, да, но действительно ли микросервисам нужно запрашивать реестр? Я так не думаю.

Каждый микросервис имеет копию схемы user.avsc и сгенерированный Avro POJO: User extends SpecificRecord. Я хочу POJO каждой Схемы для удобного манипулирования в коде.

Написать Кафке:

byte [] value = user.toByteBuffer().array();
producer.send(new ProducerRecord<>(TOPIC, key, value));

Чтение из Кафки:

User user = User.fromByteBuffer(ByteBuffer.wrap(record.value()));

Ответы [ 3 ]

1 голос
/ 17 апреля 2019

Реестр схем дает вам возможность использовать данные для более широкого набора приложений и служб, а не только для ваших микросервисов на основе Java.

Например, ваш микросервис передает данные в раздел, и вы хотите отправить эти данные в Elasticsearch или базу данных.Если у вас есть реестр схем, вы буквально подключаете Kafka Connect к теме, и теперь он имеет схему и может создавать целевое отображение или таблицу.Без Реестра Схемы каждый потребитель данных должен найти другой способ, какова схема данных.

С другой стороны - ваш микросервис хочет получить доступ к данным, записанным в теме Kafka из других источников (например, с помощью Kafka Connect или любого другого производителя ) - с помощью Реестра схемы, который выможно просто получить схему.Без этого вы начнете связывать разработку микросервиса с необходимостью знать, где производятся исходные данные и их схема.

Здесь хорошо поговорить на эту тему: https://qconnewyork.com/system/files/presentation-slides/qcon_17_-_schemas_and_apis.pdf

0 голосов
/ 17 апреля 2019

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

Здесь можно найти все доступные типы совместимости здесь .

0 голосов
/ 17 апреля 2019

Им нужно? Нет, не совсем.

Следует ли вам сэкономить место на вашей теме и не отправлять схему как часть сообщения или требовать, чтобы потребители имели схему для чтения чего-либо? Да, и это то, что AvroSerializer делает для вас - выводит эти данные из других источников, которые могут быть использованы, просто как REST API.

Затем десериализатор должен знать, как получается эта схема, и вы можете настроить его с помощью свойства specific.avro.reader=true вместо того, чтобы вручную вызывать fromByteBuffer, позволяя AvroDeserializer обрабатывать его.

Кроме того, в больших организациях перестановка вокруг одного файла user.avsc (даже если управляется версией) не контролирует, что копия со временем становится устаревшей, и не обрабатывает эволюцию в чистом виде.

...