【问题标题】:How to version a field in avro schema when Kafka Consumer updates?Kafka Consumer更新时如何对avro模式中的字段进行版本控制?
【发布时间】:2021-07-09 12:47:29
【问题描述】:

示例:- 我有一个名为

的字段
"abc":[
   {"key1":"value1", "key2":"value2"}, 
   {"key1":"value1", "key2":"value2"}
]

Consumer1,consumer2 使用这个变量,而现在 consumer2 需要的字段更少,需要更改结构。

如何通过遵循最佳实践来解决这个问题?

【问题讨论】:

    标签: apache-kafka avro


    【解决方案1】:

    您可以在 Avro 架构中使用 type mapkey 始终是 stringvalue 可以是任何类型,但应该是整个地图的一种类型。

    因此,在您的情况下,将地图引入您的架构中。 consumer_1 可以使用该事件并获取它们仅用于consumer_1 的密钥,并对consumer_2 执行相同的操作。但仍然是相同的 Avro 架构。

    注意:您不能将 null 发送到架构中的地图。你需要发送空地图。

    【讨论】:

    • 我为新变化引入了一个新变量,以支持两个消费者。一旦所有消费者都使用了最新字段,我们就可以删除旧字段。
    • 我的回答有帮助吗?
    • 是的,如果我们还没有消费者消费,我们也可以这样做,因为这是一个数据类型更改,它会破坏现有消费者的合同。
    【解决方案2】:

    如果可能,请引入架构注册表服务器以进行架构版本控制。在模式注册表中注册所有不同的 avro 模式,并将给出版本 ID。将您的生产者和消费者应用程序与模式注册服务器连接,以获取相应 Kafka 消息的注册模式。现在,任何消费者都可以完全兼容地接收具有任何模式的消息。

    【讨论】:

      猜你喜欢
      • 2018-12-26
      • 2020-06-23
      • 2022-01-12
      • 2021-02-26
      • 2011-09-25
      • 1970-01-01
      • 2023-03-09
      • 2021-10-20
      • 2019-10-19
      相关资源
      最近更新 更多