Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 基于模式演化的卡夫卡avro序列化_Apache Kafka_Avro_Kafka Producer Api - Fatal编程技术网

Apache kafka 基于模式演化的卡夫卡avro序列化

Apache kafka 基于模式演化的卡夫卡avro序列化,apache-kafka,avro,kafka-producer-api,Apache Kafka,Avro,Kafka Producer Api,我试图构建一个kakfa管道,将JSON输入数据读入Kafka主题。 我正在使用模式注册表的AVRO序列化,因为我的模式会定期更改。 到目前为止,GenericRecord用于解析模式。 但我最近了解到avro工具可用于读取模式和生成Java类,这些类可用于创建生产者代码。 在这两种选择中我很困惑。 你能建议我哪一个更好,因为我的模式经常改变吗 avro工具可用于读取模式并生成可用于创建生产者代码的java类 他们创建特定的Avro类,不是生产者代码,而是关于这个问题。两者都会起作用 在我看来

我试图构建一个kakfa管道,将JSON输入数据读入Kafka主题。 我正在使用模式注册表的AVRO序列化,因为我的模式会定期更改。 到目前为止,GenericRecord用于解析模式。 但我最近了解到avro工具可用于读取模式和生成Java类,这些类可用于创建生产者代码。 在这两种选择中我很困惑。 你能建议我哪一个更好,因为我的模式经常改变吗

avro工具可用于读取模式并生成可用于创建生产者代码的java类

他们创建特定的Avro类,不是生产者代码,而是关于这个问题。两者都会起作用

在我看来

GenericRecord—将其视为HashMap。作为消费者,需要知道要获得的字段。如果作为生产者或模式创建者,您无法将类作为库发送给消费者,那么这基本上是您所能获得的最好结果。我相信您总是能够获得最新的数据,尽管所有可能的字段都可以通过getfieldname调用访问。 SpecificRecord avro工具生成的内容-它只是一个生成的类,包含getter方法和builder对象/setter方法。任何使用者都可以将生产者类作为依赖项导入,反序列化消息,然后立即知道哪些字段可用。您不能保证在这里获得最新的模式-您将被降级,并且仅限于用于生成这些类的任何模式。 我通常使用avro-maven插件来创建类

您也可以从Java类中使用,而不是相反。在字段上设置@Union或@AvroDefault设置


谢谢你的回复。因此,在我的例子中,由于模式频繁更改,我需要使用GenericRecord方法来确保生产者和消费者都可以使用最新的模式。如果可能的话,请提供一个记录方法的例子。与第一个链接相同的回购协议。查找其他消费者的目录示例一个重要的问题。无论如何,您都需要重新编写代码以获得更新的字段,因此,如果您自己完全控制架构,那么在哪个选项上应该没有重大区别。当我们将架构注册表与avro序列化一起使用时,当模式改变时,我们是否有任何其他的选择,不需要任何代码改变。我们是否可以使用avro工具根据可用的最新模式创建类。