如何找出使用的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 中做了什么:
- 丢弃第一个字节
- 读取接下来的 4 个字节并将其转换为整数
- 剩余字节可以使用从架构注册表中获取的架构反序列化。
/旁注:
真正烦人的是这是一种特定于供应商的格式,即使 Apache Avro 规范表示 Single-object encoding 其中包含架构信息。
此外,Confluent 似乎对支持 Apache Avro 格式不感兴趣。
https://github.com/confluentinc/schema-registry/issues/1294
我有不受我控制的 Confluent 注册表,以及基于 @kafkajs/confluent-schema-registry
的生产者。有什么方法可以让我了解使用的是哪个版本的消息格式?
我可以获得编码的 AVRO
消息,但它只是字节流。有什么方法可以了解它实际上是哪个版本的消息?
我看到您使用的是 Confluent,他们有自己的有线格式版本。
嵌入在前导字节中的是架构 ID,可用于从其架构注册表中获取架构:
https://docs.confluent.io/platform/current/schema-registry/serdes-develop/index.html#wire-format
我不确定如何操作 Javascript 中的字节,但我们在 Scala 中做了什么:
- 丢弃第一个字节
- 读取接下来的 4 个字节并将其转换为整数
- 剩余字节可以使用从架构注册表中获取的架构反序列化。
/旁注: 真正烦人的是这是一种特定于供应商的格式,即使 Apache Avro 规范表示 Single-object encoding 其中包含架构信息。
此外,Confluent 似乎对支持 Apache Avro 格式不感兴趣。 https://github.com/confluentinc/schema-registry/issues/1294