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

如何在node.js中反序列化avro模式消息

充星腾
2023-03-14

我正在使用kafka从源接收数据,我正在使用用< code>Node.js编写的消费者应用程序,并使用< code>kafka-node连接到kafka服务器。另一方面,生产者是用< code>Java编写的,他们使用一些kafka流库来产生带有模式的avro消息。我可以接收消息,但它们是avro序列化的,下面是我接收的序列化消息格式-

value: '\u0000\u0000\u0001�H\u0002\u00142020-10-01\u0002\u000e1000001\u0002\u000e2668422\u000202021-06-21T09:34:19.003Z\u0000\u0002\u000e3010985\u0002T83dc24eb6aac\u0002.2021-06-21T09:34:20.453'

我正在尝试反序列化它,但无法使用avsc npm模块,因为avsc只接受缓冲区数据格式。我不确定avro消息数据格式的类型。

我们也有这些消息的模式注册表。因此,我只需要帮助反序列化node.js中的消息。我知道有一个npm模块< code>avsc可以帮助对avro消息进行编码和解码,但它只适用于buffer。请帮助我了解如何在Nodejs中反序列化avro消息。

谢谢!!!

共有1个答案

胡俊弼
2023-03-14
const v8 = require("v8");

const str =
  "<'\u0000\u0000\u0001�H\u0002\u00142020-10-01\u0002\u000e1000001\u0002\u000e2668422\u000202021-06-21T09:34:19.003Z\u0000\u0002\u000e3010985\u0002T83dc24eb6aac\u0002.2021-06-21T09:34:20.453'>";

console.log(v8.deserialize(v8.serialize(str)));
console.log(`${Buffer.from(str, "utf8")}`);
 类似资料:
  • 我正在学习Kafka,对我来说,使用Avro有一个Kafka主题和图式是有意义的。 但是当涉及到将模式定义放在何处时,我缺少了一些东西: 当序列化和反序列化消息时,有什么方法可以从模式定义中获益吗? 我找不到任何在两端都这样做的例子,特别是使用模式注册表。

  • 我收到Kafka主题中的二进制Avro文件,我必须对它们进行反序列化。在Kafka收到的消息中,我可以在每条消息的开头看到一个模式。我知道不嵌入模式并将其与实际的Avro文件分离是一种更好的做法,但我无法控制生产者,也无法更改。 我的代码在Apache Storm上运行。首先,我创建一个读卡器: 然后,我尝试反序列化消息,但不声明架构: 但当消息到达时,我会收到一个错误: 我看到的所有答案都是关于

  • 我在两个独立的AVCS模式文件中定义了记录的两个版本。我使用命名空间来区分版本SimpleV1.avsc 示例JSON 版本2只是有一个带有默认值的附加描述字段。 SimpleV2.avsc 示例JSON 这两个模式都序列化为Java类。在我的示例中,我将测试向后兼容性。V1写入的记录应由使用V2的读取器读取。我希望看到插入默认值。只要我不使用枚举,这就可以工作。 检查读者作家兼容性方法确认模式是

  • 我一直在尝试将avro通用记录进行串行化,并生成avro串行化的数据发送给Kafka。主要目标是不使用合并模式注册表存储模式,而是将模式与序列化数据一起发送,以便从kafka主题中提取并反序列化。 下面是AvroSerializer用于生成Avro数据的部分。 Kafka中出现的序列化数据如下所示。

  • 我是Avro和Kafka的新手,我花了几天时间来发送关于Kafka主题的序列化数据...不成功。 让我来解释一下我想要达到的目标: 在生产者方面,我通过SOAP接收数据并发送关于Kafka主题的内容。我正在使用CXF从WSDL生成POJO,并且编写了相应的模式。我正在尝试做的是序列化由CXF解封的对象,并在我的Kafka主题上发送它们。 在web上找到的大多数示例中,Avro记录都是使用已知的模式

  • 主要目标是聚合两个Kafka主题,一个压缩慢速移动数据,另一个每秒接收一次的快速移动数据。 我已经能够在简单的场景中使用消息,例如KV(Long, String),使用如下内容: 但是,当您需要从 AVRO 反序列化时,这似乎不是方法。我有一个KV(字符串,AVRO),我需要消费。 我尝试从AVRO模式生成Java类,然后将它们包含在“应用”中,例如: 但这似乎不是正确的方法。 是否有任何文档/示