SchemaRegistry 有助于与需要写入架构来解码接收到的消息的使用者共享用于对消息进行编码的写入 Avro 架构。另一个重要功能是协助架构演变。
假设生产者P定义了存储在逻辑模式S下的写Avro模式v1,消费者C1定义了读(投影)模式v1,另一个消费者C2定义了它自己的读(投影)模式。读取模式不共享,因为Avro在本地使用它们将消息从编写器模式转换到读取器模式。
想象一下没有任何突破性变化的模式演变:
现在想象一些模式突破性的变化:
问题是,SchemaRegistry如何才能派上用场,防止消费者方面的任何破坏性更改?请注意,必须对所有版本的写模式进行读模式的兼容性检查。
有一个endpoint允许检查主题中版本的兼容性。问题是它使用在主题上设置的兼容性类型。不能使用包含写入模式版本的主题,因为它配置了FORWARD_TRANSITIVE兼容性类型,但读取模式必须向下兼容。
创建另一个具有兼容性类型BACKWARD_TRANSITIVE主题将不起作用,因为具有向前兼容更改(例如,添加非可选字段)的写入架构的新版本将无法存储在此主题中。
想到的一个选项是使用CompatibilityChecker编写一些单元测试。这是一个丑陋的解决方案,因为每个消费者必须在本地持有所有版本的写模式。当生产者的模式发生变化时,同步所有消费者将是一件痛苦的事情。
Schema Registry允许我们跟踪生产者和消费者当前使用的模式。
创建另一个具有兼容性类型BACKWARD_TRANSITIVE主题将不起作用,因为具有向前兼容更改(例如,添加非可选字段)的写入架构的新版本将无法存储在此主题中。
你非常接近。实际上,向写模式添加非可选字段是向前兼容的,但不是向后兼容的,因为您可能已经生成了没有该字段值的数据。但我们并没有对写模式和读模式应用相同的更改。这仅在更改同时向前和向后兼容(也称为完全兼容)时有效,例如添加/删除可选字段。在本例中,我们必须将新字段作为可选字段添加到读取模式。
最初可以将写模式推送到这个新主题,但从那时起,它是一个独立的读模式,必须与写模式分开发展。
您可以应用当前用于检查写入模式更改的任何方法。例如,在允许使用之前,让每个使用者将它将要使用的模式推送到具有BACKWARD_TRANSITIVE兼容性类型的主题。
还有一个用于CI/CD环境的Schema Registry Maven插件。
另一种选择是使用具有完全传递兼容性的单个主语。
如何使用Spring Kafka通过合流模式注册表读取AVRO消息?有样品吗?我在官方参考文件中找不到它。
我正在尝试使用Confluent schema registry,下面是我在Github中找到的一些示例(https://github.com/gAmUssA/springboot-kafka-avro). 当消费者和生产者与模型共享相同的命名空间而不是其工作时。 当使用者位于具有不同名称空间但具有相同类(名称和属性方面)的不同项目中时,它不工作。 合流Avro反序列化程序可以使用正确的值反序列化
我正在与Avro/Kafka和Confluent的Avro模式注册中心合作。 我使用avsc文件和avdl制作了一些基本模式和具有基本类型的主题。 我正在查看Confluent制作的API文档,以尝试将模式发展到版本2。特别是本部分: https://docs.confluent.io/current/schema-registry/using.html#register-a-new-versio
我使用来自Confluent的Kafka Connect来使用Kafka流并以拼花格式写入HDFS。我正在1个节点中使用架构注册表服务,它运行良好。现在我想将模式注册表分发到集群模式以处理故障转移。关于如何实现这一点的任何链接或片段都将非常有用。
我们正在开发并尝试删除主题的模式,因为更改与旧模式不兼容。 我们删除了模式/主题,并尝试使用相同的主题名称创建新模式,成功创建了模式。 然而,当我们运行应用程序时,它仍然指向相同的模式ID。 旧模式ID(主题“topic1”):51 新架构ID(主题“topic1”):52 应用程序在反序列化消息时出错 <代码>root@bas:/#curl-khttps://schemaregistry:443
安全模式 此预发行版本中引入了一项新功能,允许您在出现错误而无法启动 Illustrator 时,从这些错误中恢复。 倘若遇到导致 Illustrator 在启动时崩溃的情况。例如,字体损坏、增效工具错误或首选项文件损坏。如果启动失败,则在下次尝试启动时,可以选择以“安全模式”启动 Illustrator。Illustrator 启动时将检查是否存在任何导致错误的文件。以“安全模式”启动 Illu