【问题标题】:Confluent Schema Registry/Kafka Streams: prevent schema evolutionConfluent Schema Registry/Kafka Streams:防止模式演变
【发布时间】:2021-01-11 05:52:52
【问题描述】:

有没有办法配置 Confluent Schema Registry 和/或 Kafka Streams 以防止模式演变?

动机

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

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

解决方案

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

因此,我们考虑修改 Kafka Streams 作业以在发送之前从 Confluent Schema Registry 中读取模式。如果接收到的模式与消息的本地模式匹配,那么我们才会发送它们。

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

更新:我们找到了一个article on medium,用于在发送之前根据架构注册表验证架构。

【问题讨论】:

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

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 2020-01-25
    • 2023-02-13
    • 2022-12-24
    • 1970-01-01
    • 2019-03-25
    • 2021-10-04
    • 2020-03-20
    相关资源
    最近更新 更多