Spring / Avro - использование слияния реестра схем - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь использовать Confluent schema-registry и он работает для меня, следуя нескольким примерам, которые я нашел в Github (https://github.com/gAmUssA/springboot-kafka-avro).

Когда потребитель и производитель разделяют одно и то же Пространство имен как модель, чем его рабочая.

Когда потребитель находится в другом проекте с другим пространством имен, но с тем же классом (по имени и свойствам), чем он не работает.

Confluent Avro deserializer можно десериализовать в класс GenericData $ Record с правильными значениями, но он не может привести его к фактическому объекту.

Я пытаюсь это сделать:


@Data
@AllArgsConstructor
public class User {
    String name;
    int age;
}
...

@KafkaListener(topics = "users", groupId = "group_id")
public void consume(ConsumerRecord<String, User> record) {
    log.info(String.format("Consumed message -> %s", record.value().getName()));
}

Приведенный выше код не работает при проблеме приведения.

Когда я добавляю к реквизиту спецификацию c .avro.reader = true, это также не удается.

Разве это не вся цель реестра схемы, чтобы быть центральным репо, чтобы данные могли быть десериализованы схемой в разных проектах и ​​даже на разных языках (python, java,. net, et c ..)?

Чего мне не хватает?

1 Ответ

0 голосов
/ 28 января 2020

Проблема в том, что ваш класс User не является классом Avro.

Вы должны использовать плагины Avro Maven / Gradle для генерации своих классов, а не Lombok, а пространства имен и полные схемы действительно должны Align. Наилучший способ, который я нашел, - это разработать и выпустить модели, полностью отделенные от реального кода kafka

...