【问题标题】:how to share avro schema definitions across teams如何跨团队共享 avro 模式定义
【发布时间】:2020-01-07 21:40:03
【问题描述】:

Kafka schema-registry 提供了一种使用通用数据合约对来自 Kafka 的数据进行序列化和反序列化的好方法。然而,数据契约(.avsc 文件)是生产者和消费者之间的粘合剂。

一旦生产者制作了 .avsc 文件,就可以将其签入到生产者一方的版本控制中。根据语言,它也会自动生成类。

然而,

  1. 对于消费者来说,下拉模式定义以供参考的最佳机制是什么?是否有类似 swaggerhub 或 avro 的典型 api 文档门户?
  2. 如果我们使用 Confluent 平台,控制中心会提供一个 gui 来查看与主题关联的架构,但它也允许用户进行编辑。生产者和消费者团队之间如何运作?什么会阻止消费者或任何人直接在 Confluent 平台上编辑架构?
  3. 这是我们需要使用 rest-proxy 自定义构建的东西吗?

【问题讨论】:

    标签: apache-kafka avro confluent-platform confluent-schema-registry


    【解决方案1】:

    您说的是使用 Avro 架构的两种不同方式:

    • 让架构注册表为您存储架构。
    • 生成一个.avsc 文件并将其提供给下游消费者。

    在第一种方法中,您的生产者将拥有一个 .avsc 文件,用于序列化消息并将它们发送到 Kafka,但如果您使用的是模式注册表,则无需担心消费者需要实际的 Avro 定义,因为整个 Avro 模式可以从模式注册表中使用模式 id 获得。您没有实际生成的类,没错,但您仍然可以“遍历”整个消息,并从中提取数据。

    在第二种方法中,不使用模式注册表,生产者使用.avsc 文件将发送到 Kafka 的数据序列化为字节数组,然后将该文件提供给消费者/下游应用程序,通常通过源代码控制。当然,这意味着您的生产者和消费者必须在您进行架构更改时保持同步,否则您的消费者将无法读取生产者添加或修改的字段。

    因此,如果您使用架构注册表,如果配置正确,Kafka 消费者将自动提取每条消息所需的架构,然后您可以提取所需的数据。另外,您还可以通过以下方式获取任何主题的最新架构:

      curl -X GET "http://schema-registry.company.com:8081/subjects/your_topic-value/versions/latest/schema"
    

    但是,如果您使用模式注册表,则获取完整模式的唯一方法是访问用于序列化消息的 .avsc 文件,通常通过源代码控制, 正如刚才提到的。然后,您还可以共享自动生成的类(如果可用),以将您的消息直接反序列化为类。

    有关如何与 Schema Registry 交互的更多信息,请参阅文档链接:https://docs.confluent.io/current/schema-registry/schema_registry_tutorial.html#using-curl-to-interact-with-schema-registry

    还有一些关于一般模式兼容性以及如何在模式注册表中处理/配置的阅读 - https://docs.confluent.io/current/schema-registry/avro.html

    【讨论】:

    • 如何解析架构?还是我们应该事先知道第一种方法(注册表)的架构?
    【解决方案2】:

    这是一个有点老的问题,但答案可能对其他人有帮助。

    1. 我建议为此使用架构注册表,例如汇合模式注册表或 Apicurio 注册表。多亏了这一点,您将拥有一个信息来源,了解哪些模式可用、更改的历史是什么,并且您不需要在应用程序之间同步它。如果您使用代码优先,架构最后的方法,如您所描述的,则可以通过自动注册或 CI 上的某些部署管道将架构推送到注册表。
    2. 我不熟悉 Confluent 控制中心,但在我正在处理的项目 (Nussknacker) 中,我们使用的是 AKHQ 工具,该工具具有只读模式(我敢打赌,Confluent 控制中心具有相同的选项)。在 Nussknacker 的部署过程中,我们通常在某个单独的 git 存储库中拥有模式,并且通过审查过程添加新版本的模式,然后通过 CI 中的管道步骤将该模式添加到模式注册表中。 IMO 它是更好的选择,而不是自动注册或通过 GUI 添加,因为生产者和消费者双方都可以谈论 API 设计。这种方法中的 AKHQ 或其他可视化工具仅用于模式注册表状态的可视化。我们的管道步骤是使用 REST API,如 mjuarez 所述。

    【讨论】:

      猜你喜欢
      • 2017-02-05
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 2012-03-01
      相关资源
      最近更新 更多