融合模式注册表/ Kafka流:阻止模式演变

时间:2020-09-24 21:49:01

标签: apache-kafka apache-kafka-streams confluent-schema-registry

是否有一种方法可以配置 Confluent Schema Registry 和/或 Kafka Streams 以防止架构演变?

动机

我们有多个Kafka Streams作业为同一主题生成消息。所有作业都应使用相同的模式发送消息,但是由于作业配置错误,已经发生了其中一些发送字段丢失的消息。这已导致下游问题,这是我们要防止的事情。

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

解决方案

我们检查了 Confluent Schema Registry 和/或 Kafka Streams 的文档,但找不到阻止模式演变的方法。

因此,我们考虑在发送前修改Kafka Streams作业以从Confluent Schema Registry中读取架构。如果收到的架构与邮件的本地架构匹配,则只有我们发送它们。

这是正确的方法吗?还是我们错过了更好的选择?

更新:我们发现了一个article on medium,用于在发送之前根据模式注册表对模式进行验证。

1 个答案:

答案 0 :(得分:0)

这取决于您使用哪种语言和库以及它们提供哪种API。如果要发布通用记录,则可以将.avdl.avsc文件读取并解析为 record 类型并构建事件。这意味着,如果您尝试构建的事件与当前架构不兼容,则您甚至无法构建该事件,因此将无法修改现有架构。因此,在这种情况下,只需在源代码中存储静态模式即可。对于特定的记录,它或多或少是相同的,您可以基于模式构建Java / C#或其他语言的,然后构建它们,然后简单地将其新建并发布。有什么意义吗?) PS。我在Kafka的C#库中工作,也许其他一些语言不支持该语言,或者还有其他更好的选择