Spring / Avro - 使用融合模式注册表

Spring / Avro - using confluent schema registry

我正在尝试使用 Confluent 模式注册表,它按照我在 Github (https://github.com/gAmUssA/springboot-kafka-avro) 中找到的一些示例为我工作。

当消费者和生产者与模型共享相同的名称空间时。

当消费者处于具有不同命名空间但相同 class(名称和属性明智)的不同项目时,它不起作用。

Confluent Avro 反序列化器可以使用正确的值反序列化为 GenericData$Record class,但无法将其转换为实际对象。

我正在尝试这个:


@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()));
}

以上代码在转换问题上失败。

当我将 specific.avro.reader=true 添加到道具时,它也失败了。

这不是架构注册表的全部目的吗,成为一个中央仓库,以便数据可以通过不同项目甚至不同语言的架构反序列化(python,java,.net,等等..)?

我错过了什么?

问题是您的用户 class 不是 Avro class。

您应该使用 Avro Maven / Gradle 插件来生成您的 classes 而不是使用 Lombok,并且命名空间和完整模式确实需要对齐。我发现最好的管理方法是开发和发布与实际的 kafka 代码完全分开的模型