反序列化 Kafka Avro 记录 [重复]

问题描述 投票:0回答:1

我正在编写一个从 Apache Kafka 数据流中读取的 Java 程序。这些消息是 Avro 序列化的。每条消息都包含一条 Avro 序列化记录。包 io.confluent.kafka.serializers.KafkAvroDeserializer 在我的开发平台上不可用;如果是,那么将属性“value.deserializer”设置为用于 Avro 反序列化的正确设置 (KafkaAvroDeserializer.class) 将是一件简单的事情。因此,我需要编写自己的解串器。我在网上找到的所有内容都是关于如何序列化记录,使用指定的 Avro 模式将它们写入文件,然后如何读取和反序列化写入的记录。据我所知,Java Parsers 库并没有提供太多帮助,因为它假定程序以非序列化形式接收数据,然后提供必要的对象方法来序列化它,然后提供必要的方法来反序列化它。

所以,我的问题是:如何在 Java 中反序列化 Avro 格式的记录?只是一个记录。我有序列化记录。我有 Avro 架构。我不需要给它附加一个可序列化的文件。我只需要反序列化该记录。我不敢相信以前没有这样做过,但我确实在网上找不到任何相关信息。有人可以帮我吗?

提前谢谢你。

我尝试使用 Java 解析器库、各种 Kafka Avro“value.deserializer”属性设置、我的 Eclipse pom.xml 文件中的不同包。一切都无济于事。

有一种简单的方法可以通过提供必要的模式(我已经有了)来反序列化单个 Avro 记录。

java apache-kafka avro
1个回答
0
投票

以前做过。 Avro 文档(和/或 JavaDoc)完全涵盖了您需要的内容,即

BinaryDecoder
类。

相同的文档假设记录are序列化。然而,Confluent 的 Avro 序列化记录与直接序列化记录不同,因此,不清楚您到底需要什么。

io.confluent.kafka.serializers.KafkAvroDeserializer 包在我的开发平台上不可用

然后用Maven/Gradle添加呢?但这需要你有一个正在运行的模式注册表,而不仅仅是一个 Avro 模式文件。

否则,该代码是开源的,因此您可以自己复制该类。如前所述,它使用

BinaryDecoder
类。

© www.soinside.com 2019 - 2024. All rights reserved.