Зачем нужен реестр Avro Schema для статически типизированных языков? - PullRequest
0 голосов
/ 20 апреля 2020

Меня интересует необходимость в реестре Avro Schema при использовании сообщений из топики Kafka c с использованием статически типизированного языка, например Java. Я использую сообщения из установки Kafka topi c, например:

    Properties props = new Properties();
    props.setProperty(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, String.join(",", kafkaProperties.getServers()));
    props.setProperty(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, ByteArrayDeserializer.class.getName());
    props.setProperty(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, KafkaAvroDeserializer.class.getName());

    props.setProperty(KafkaAvroDeserializerConfig.SCHEMA_REGISTRY_URL_CONFIG, kafkaProperties.getSchemaRegistryUrl());
KafkaConsumer<byte[], FooClass> kafkaConsumer = new KafkaConsumer<>(props);;

В моем проекте у меня есть .avsc файлы, которые определяют схему для класса FooClass. Я также настроил avro-maven-plugin для генерации класса FooClass для меня во время сборки.

Почему мне все еще нужно указать URL-адрес реестра схемы? Разве мой потребитель не может десериализовать значения моих сообщений Kafka, используя файл .avsc в моем проекте?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

Вы используете библиотеки Confluent ( io.confluent.kafka.serializers.KafkaAvroDeserializer ), которые определяют их собственный формат Confluent Avro и требуют использования реестра Confluent Schema.

Технически, вам не нужен реестр для Apache Avro.

Avro требуется схема писателей для декодирования сообщения, и хотя она включена в файлы Avro, она делает их самоописанными. , он не включен в потоковый формат или Confluent Avro .

Итак, клиенту нужен какой-то способ поиска схемы. Это либо решается реестром Confluent Schema для формата Confluent Avro, либо может быть решена вашей собственной org. apache .avro.message.SchemaStore . См. этот пример , где я использую SchemaStore.Cache , предварительно заполненный известными схемами.

Обратите внимание, что в примере используется формат Apache Avro , что несовместимо с Confluent Avro .

Для десериализатора Confluent Avro требуется реестр Confluent Schema, и у него нет API для «запуска с известными схемами».

0 голосов
/ 20 апреля 2020

Цель реестра схем - сделать схемы доступными для всех производителей и потребителей, без необходимости связывать их вместе с помощью распространения и управления чем-то вроде файла .avsc. Подобный файл отлично подходит для отдельного проекта, но Kafka часто используется несколькими приложениями, возможно, в разных командах или даже в подразделениях, и поэтому очень важно иметь возможность более свободно определять, как схема используется совместно.

Ссылка: https://docs.confluent.io/current/schema-registry/index.html

...