如何找出使用的avro版本?

How to figure out avro version used?

我有不受我控制的 Confluent 注册表,以及基于 @kafkajs/confluent-schema-registry 的生产者。有什么方法可以让我了解使用的是哪个版本的消息格式?

我可以获得编码的 AVRO 消息,但它只是字节流。有什么方法可以了解它实际上是哪个版本的消息?

我看到您使用的是 Confluent,他们有自己的有线格式版本。

嵌入在前导字节中的是架构 ID,可用于从其架构注册表中获取架构:

https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#wire-format

我不确定如何操作 Javascript 中的字节,但我们在 Scala 中做了什么:

  1. 丢弃第一个字节
  2. 读取接下来的 4 个字节并将其转换为整数
  3. 剩余字节可以使用从架构注册表中获取的架构反序列化。

/旁注: 真正烦人的是这是一种特定于供应商的格式,即使 Apache Avro 规范表示 Single-object encoding 其中包含架构信息。

此外,Confluent 似乎对支持 Apache Avro 格式不感兴趣。 https://github.com/confluentinc/schema-registry/issues/1294