使用 avro 作为带有 kafka 模式注册表的关键主题

问题描述 投票:0回答:1

我和我的团队最近遇到了用于主题键的 Avro 架构问题。我们更改了对键的评论,这完全破坏了我们的 Kafka Streams 连接,也破坏了我们主题的压缩。

经过调查,似乎更改记录上的评论实际上会创建该主题的新版本。例如,给定一个主题

my.awesome.topic.snapshot
,使用
AwesomeKey
AwesomeValue
作为记录,在
AwesomeKey
上添加评论会导致创建主题
my.awesome.topic.snapshot-key
的新版本,这会破坏 Kafka 流连接和聚合,以及压实。

我对这个问题的理解是,这不是代理的错误,也不是架构注册表或流 DSL 的错误。对于这些用例,密钥不会被反序列化,根据设计,它只是比较字节。即使反序列化时键是相同的,因为架构的 id(存储在 Magic Byte 中)不同,键也被认为是不同的。

我们是否每次想要更改评论时都必须创建一个新主题?我们应该完全避免 Avro 作为主题键吗?有没有办法告诉架构注册表阻止对主题的任何更改,即使是完全兼容的更改(例如注释更改)?我正在寻找解决方案,所以这个问题永远不会再发生。我们使用

avdl
格式和 Java,如果这会改变的话。

apache-kafka apache-kafka-streams avro confluent-schema-registry
1个回答
0
投票

您能否将密钥放在消息标头中(可能作为一个键/值对以便于访问),然后创建第二个 Avro 类,其中仅包含构成实际复合密钥的原始密钥的值。使用该仅键字段类作为消息键。这使您可以随着时间的推移向原始 Avro 类添加任意数量的字段,同时不会影响(复合)键。您可能还需要一个带有生产和消费方法的公共访问类来强制和封装支持您新使用两个 Avro 类所需的逻辑。

© www.soinside.com 2019 - 2024. All rights reserved.