反序列化期间消费者模式更新
Consumer schema update during deserialization
我目前正在研究 Avro 模式系统,据我所知,模式更新的流程是:
1) 客户端更改模式(可能通过添加具有向后兼容性默认值的新字段)并将数据发送到使用更新后的模式序列化的 Kafka。
2) 架构注册表进行兼容性检查并使用新版本和唯一 ID 注册新版本的架构。
3) 消费者(仍然使用旧模式)尝试反序列化数据,模式演化丢弃新字段,允许消费者反序列化数据。
据我所知,我们需要明确更新
架构更改后的消费者,以便为他们提供最新的架构。
但是为什么消费者看到ID变了就拉取最新的schema呢?
如果消费者使用 SpecificRecord 子类,则需要更新消费者模式。这实际上是在跳过架构 ID 查找
如果你希望它始终匹配最新的,那么你可以对注册表进行http调用/最新并获取它,然后重新启动应用程序。
或者如果你总是希望消费者使用消息的ID,使用GenericRecord
作为对象类型
我目前正在研究 Avro 模式系统,据我所知,模式更新的流程是:
1) 客户端更改模式(可能通过添加具有向后兼容性默认值的新字段)并将数据发送到使用更新后的模式序列化的 Kafka。
2) 架构注册表进行兼容性检查并使用新版本和唯一 ID 注册新版本的架构。
3) 消费者(仍然使用旧模式)尝试反序列化数据,模式演化丢弃新字段,允许消费者反序列化数据。
据我所知,我们需要明确更新 架构更改后的消费者,以便为他们提供最新的架构。 但是为什么消费者看到ID变了就拉取最新的schema呢?
如果消费者使用 SpecificRecord 子类,则需要更新消费者模式。这实际上是在跳过架构 ID 查找
如果你希望它始终匹配最新的,那么你可以对注册表进行http调用/最新并获取它,然后重新启动应用程序。
或者如果你总是希望消费者使用消息的ID,使用GenericRecord
作为对象类型