当前位置: 首页 > 知识库问答 >
问题:

为什么静态类型语言需要Avro模式注册表?

秦涵映
2023-03-14
    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?难道我的使用者不能使用项目中的.avsc文件反序列化我的Kafka消息的值吗?

共有1个答案

茅昀
2023-03-14

您正在使用汇流库(io.Confluent.kafka.serializers.kafkaavrodeserializer),它们定义了自己的汇流Avro格式,并要求使用汇流模式注册表。

从技术上讲,Apache Avro不需要注册表。

Avro需要Writer模式来解码消息,虽然它包含在Avro文件中,使其能够自我描述,但它不包含在流格式或汇合Avro中。

因此,客户端需要某种方法来查找模式。这可以通过合流Avro格式的合流模式注册表解决,也可以通过您自己的org.apache.Avro.message.schemastore解决。请参阅这个示例,其中我使用了一个预填充了已知模式的SchemaStore.cache。

请注意,该示例使用Apache Avro格式,该格式与Confluent Avro不兼容。

汇流Avro反序列化器需要一个汇流模式注册表,并且没有“使用已知模式运行”的API。

 类似资料:
  • 我是Hadoop和编程的新手,我对Avro模式演变有点困惑。我将解释到目前为止我对Avro的理解。 Avro是一种串行化工具,它存储二进制数据,其json模式位于顶部。模式如下所示。 现在我的问题是为什么我们需要进化?我已经了解到,我们可以在新字段的模式中使用<code>default</code>选项;但是,如果我们在文件中添加一个新的模式,早期的模式将被覆盖。一个文件不能有两个架构。 另一个问

  • 本文向大家介绍动态语言、动态类型语言、静态类型语言、强类型语言、弱类型语言介绍,包括了动态语言、动态类型语言、静态类型语言、强类型语言、弱类型语言介绍的使用技巧和注意事项,需要的朋友参考一下 关于如题这几个概念,大部分人应该比较熟悉,但是我昏了好久,所以写下来加深印象。 1. 动态语言 又叫动态编程语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如

  • 问题内容: 仅仅是因为动态类型,我们不需要python中的接口概念(例如Java和C#)吗? 问题答案: 将 作为关键字和神器是在Java引入1(和C#把它从那里)来描述一下合同的对象必须坚持为。 但是,接口一直是面向对象范例的关键部分,基本上它表示对象必须响应的方法。Java只是强制执行此机制以提供静态类型检查。 因此,动态(OO)编程语言 确实会 使用接口,甚至认为它们不会静态检查它们。就像其

  • 我试图添加库暴露到我的项目。所以,它把我带到了bintray页面,在那里它说使用。我打开我的文件并将该文件放入段: IntelliJ自动构建它,我得到以下错误 警告:根项目“DB表到Orm”:无法生成Kotlin项目配置详细信息:java。朗。反思。InvocationTargetException:null由:org引起。格拉德尔。应用程序编程接口。人工制品ResolveException:无法

  • 我使用KOTLIN/SPRING BOOT(2.5.4)/MAVEN/MARIA DB我遇到了这样的错误,所以我想我必须找到make bean。但是我找不到我错过的东西。你能帮我吗...? 我的项目是Kotlin com。实例测试0831└ 控制器└ 用户控制器└ 实体└ 使用者└ 存储库└ 用户存储库└ 服务└ 用户服务└ UserServiceImpl 程序包com。实例test0831.co

  • 问题内容: 这是指帖子 ..无法回复或评论任何这样创建的新帖子。为什么是我的 发出警告-应该以静态方式访问静态字段MyUnits.MILLSECONDS吗?谢谢。 问题答案: 因为当您访问静态字段时,您应该在类(或本例中为枚举)上执行此操作。如 不在实例中 编辑 要解决 为什么这样 的问题:在Java中,当您将声明为时,就是说它是类的成员,而不是对象(因此为什么只有一个)。因此,在对象上访问它是没