Apache kafka 合流模式注册表/Kafka流:防止模式演化

Apache kafka 合流模式注册表/Kafka流:防止模式演化,apache-kafka,apache-kafka-streams,confluent-schema-registry,Apache Kafka,Apache Kafka Streams,Confluent Schema Registry,有没有办法配置合流模式注册表和/或Kafka流以防止模式演变 动机 我们有多个Kafka Streams作业为同一主题生成消息。所有作业都应发送具有相同模式的消息,但由于作业配置错误,有些作业发送的消息中缺少字段。这导致了下游问题,我们希望防止这种情况发生 当这种情况发生时,我们可以在模式注册表中看到预期的模式演变 解决方案 我们检查了文档中的汇合模式注册表和/或Kafka流,但找不到阻止模式演变的方法 因此,我们考虑在发送卡夫卡工作流之前,从并发模式注册表中读取该模式。如果接收到的模式与消息的

有没有办法配置合流模式注册表和/或Kafka流以防止模式演变

动机 我们有多个Kafka Streams作业为同一主题生成消息。所有作业都应发送具有相同模式的消息,但由于作业配置错误,有些作业发送的消息中缺少字段。这导致了下游问题,我们希望防止这种情况发生

当这种情况发生时,我们可以在模式注册表中看到预期的模式演变

解决方案 我们检查了文档中的汇合模式注册表和/或Kafka流,但找不到阻止模式演变的方法

因此,我们考虑在发送卡夫卡工作流之前,从并发模式注册表中读取该模式。如果接收到的模式与消息的本地模式匹配,则我们只发送它们

这是正确的选择还是我们错过了更好的选择


更新:我们找到了一个在发送前根据架构注册表验证架构的方法。

这取决于您使用的语言和库以及它们提供的API类型。如果要发布一般记录,可以将.avdl或.avsc文件读取并解析到记录类型中,然后生成事件。这意味着,如果您试图构建的事件与当前模式不兼容,您甚至无法构建该事件,因此无法修改现有模式。因此,在本例中,只需将静态模式与源代码一起存储。对于特定的记录,它或多或少是相同的,您可以基于模式构建Java/C或其他语言类,您可以构建它们,然后简单地新建并发布它们。这有什么意义吗?
另外,我曾为卡夫卡使用过C libs,可能其他一些语言没有这种支持,或者有其他更好的选项

您是否尝试过将SR配置为完全兼容最严格的兼容级别?嗨,Matthias,谢谢您指出这一点!我们最终将SR设置为完全兼容,它为我们解决了这个问题。