当前位置: 首页 > 知识库问答 >
问题:

Kafka Avro模式演化

马魁
2023-03-14

我正试图了解更多关于我们在Kafka主题中使用的Avro模式的信息,我对这一点相对来说比较陌生。

我想知道是否有一种方法可以在特定情况下发展模式。我们用一个不能为null的新字段或任何默认值来更新模式,因为这些新字段是标识符。解决这个问题的方法是创建新主题,但是有没有更好的方法来改进现有模式?

共有1个答案

裴甫
2023-03-14

主题中有四种可能的兼容性:-向前:等待旧版本架构的客户端可以读取新版本-向后:等待新版本架构的客户端可以读取旧版本-两者:两者都在上面-

考虑到有些时候,一些生产商会生产新旧数据,而消费者会生产新旧数据。

在你的情况下,客户会怎么做?

  • 添加字段始终是向前兼容的(旧客户端只需删除新字段)

此外,这仅适用于您计划将数据转换为特定模式(例如使用相应的POCO)-如果您只是将其转换为json并进行自定义处理,您可以有一个新的客户端处理这两种模式。

所以我有两种可能的方式来写同一个话题:

>

例如,如果您以前有一个“名字”,并且希望添加“姓氏”,则可以将“姓氏”默认设置为“NC”(或空),就像您在数据库中所做的那样。

  • 您可以将兼容性默认值设置为none(或forward),以便更新模式(默认情况下,兼容性为backward)。在这种情况下,等待新模式的客户端将无法处理旧数据。但是,如果您只处理传入数据(更改兼容性,更新所有生产者(以便只有新数据会到达),然后您的客户机等待新模式,那么它可能适合您的使用——记住将兼容性设置回向后或您真正想要的兼容性

我会选择选项1。

 类似资料:
  • 我有两个问题: > 我曾尝试使用模式V1编写记录,并使用模式V2读取记录,但出现以下错误: org.apache.avro。AvroTypeException:找到foo,应为foo 我使用avro-1.7.3和: 以下是这两种模式的示例(我也尝试过添加命名空间,但没有成功)。 架构V1: 架构V2: 提前谢谢。

  • 幕布支持将文档用演示模式展现,演示模式能够简单而有条理地展示你的想法。 点击右上角「演示模式」按钮,即可开启演示模式。 演示模式下,文档不可编辑,但仍可展开/收缩节点。 右上角菜单栏分别为: 切换日间/夜间模式; 放大; 缩小; 退出演示模式。

  • 我想读取相同数据集的2个avro文件,但与模式演化 null 提前谢谢:)

  • 我尝试使用avro-python3(向后兼容性)重新创建一个模式演变案例。 我有两个模式: 第二个模式没有字段,但有两个附加字段:和。 根据avro模式演化规则,如果我用schema_v1写入avro记录: …我可以使用schema_v2读取它,前提是不存在字段有默认值 但我得到了以下错误: 我知道这在Java中有效。这是一个视频课程的示例。有没有办法让它在python中工作?

  • 当我试图用一个简单的Java程序测试Avro模式演化时,我得到了一个< code>ClassCastException。 Avro版本: 你能让我知道如何解决这个错误吗?

  • 如果我使用模式版本1序列化一个对象,然后将模式更新为版本2(比如添加一个字段),那么在以后反序列化该对象时是否需要使用模式版本2?理想情况下,我只希望使用模式版本2,并使反序列化对象具有在对象最初序列化后添加到模式中的字段的默认值。 也许一些代码会更好地解释... 架构 1: 方案2: 使用通用非代码生成方法: 导致EOFException。使用会导致AvroTypeException。 我知道如