Кафка авро сериализация со схемой эволюции - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь построить конвейер kakfa, который будет считывать входные данные JSON в тему Kafka.
Я использую сериализацию AVRO с реестром схемы, поскольку моя схема регулярно меняется.
На данный момент GenericRecord являетсяиспользуется для анализа схемы.
Но недавно я узнал, что доступны средства avro-tools для чтения схемы и создания классов Java, которые можно использовать для создания кода производителя.
Я не могу выбрать один из этих двух вариантов.
Подскажите, пожалуйста, какой из них лучше, так как моя схема часто меняется?

1 Ответ

0 голосов
/ 16 мая 2018

Доступны avro-инструменты для чтения схемы и создания классов Java, которые можно использовать для создания кода производителя

Они создают определенные классы Avro, не код производителя, а в отношении вопроса. Оба будут работать.

Как я это вижу

  • GenericRecord - Думайте об этом как HashMap<String, Object>. Как потребитель должен знать поля, чтобы получить. Если вы, как производитель или создатель схемы, не можете отправлять ваши классы в виде библиотеки своим потребителям, это, по сути, лучшее, что вы можете получить. Я полагаю, что вы всегда сможете получить самые последние данные (ко всем возможным полям можно обратиться с помощью вызова get("fieldname"). См. Пример здесь
  • SpecificRecord (что генерирует avro-tools) - это просто сгенерированный класс с методами получения и объектами построения / методами установки. Любой потребитель сможет импортировать ваши классы производителей как зависимости, десериализовать сообщение, а затем сразу узнать, какие поля доступны. Вы не гарантированно получите последнюю схему здесь - вы будете «понижены» и ограничены тем, что использовалось для генерации этих классов.

Я использую avro-maven-plugin для общего создания классов. Так же, как этот пример

Вы также можете использовать AvroReflect для создания схемы Avro из класса Java, а не наоборот. Аннотации можно использовать в полях для установки @Union или @AvroDefault настроек.

Дополнительная информация об использовании реестра Confluent Schema

...