主题没有配置主题级别的兼容性
Posted
技术标签:
【中文标题】主题没有配置主题级别的兼容性【英文标题】:Subject does not have subject-level compatibility configured 【发布时间】:2021-12-08 05:17:54 【问题描述】:我们在堆栈中使用 Kafka、Kafka connect 和 Schema-registry。版本为 2.8.1(Confluent 6.2.1)。 我们使用 Kafka connect 的配置(key.converter 和 value.converter),其值为:io.confluent.connect.avro.AvroConverter。
它会自动为主题注册一个新模式。但是有一个问题,AvroConverter 没有为新架构指定主题级别的兼容性 当我们尝试通过 REST API /config 获取架构的配置时出现错误:Subject 'schema-value' 没有配置主题级别的兼容性
如果我们指定请求参数defaultToGlobal,则返回全局兼容性。但它对我们不起作用,因为我们无法在请求中指定它。我们正在使用第 3 方 UI:AKHQ。
通过 AvroConverter 注册新架构时如何指定主题级别的兼容性?
【问题讨论】:
【参考方案1】:最后我检查了一下,可以提供给任何影响 Registry HTTP 客户端的 Avro 序列化程序配置的唯一属性是 url、是否自动注册以及是否使用最新的架构版本。
在模式注册期间没有设置主题级别或全局配置的属性(甚至方法调用)
欢迎您查看源代码以验证这一点
但这对我们不起作用,因为我们无法在请求中指定它。我们正在使用第 3 方 UI:AKHQ
听起来不像是连接问题。为 AKHQ 项目创建 PR 以修复请求
【讨论】:
【参考方案2】:截至 2021 年 10 月 26 日,我使用了 akhq 0.18.0 jar 和 confluent-6.2.0,akhq 中的架构注册表工作正常。
注意:我也使用了 confluent-6.2.1,看到完全相同的错误。因此,您可能需要切换回 6.2.0 来尝试一下。
P.S: all 仅用于我的本地开发环境、VirtualBox、Ubuntu。
【讨论】:
【参考方案3】:@OneCricketeer 是正确的。 不幸的是,无法在 AvroConverter 中指定主题级别的兼容性。
我只看到两个解决方案:
-
覆盖 AvroConverter 以添加属性和功能,以便在注册架构后向 API /config/subject 发送附加请求。
为 AKHQ 提供支持以支持 defaultToGlobal 参数。但在这种情况下,我们还需要反向移植 schema-registry RestClient。 Github issue
在用户在转换器的设置中指定兼容级别之前,第二种解决方案更可取。如果在本机 AvroConverter 中没有此设置,我们必须为每个编写模式的客户端使用自定义转换器。并且付出了很多努力。
对我来说,为什么客户端在注册模式时无法设置兼容性并且必须对其使用不同的请求,这看起来很奇怪。
【讨论】:
作为不降级Kakfa的lib版本的最简单的解决方案,我们只需编写一个python脚本并通过REST API设置主题兼容性。以上是关于主题没有配置主题级别的兼容性的主要内容,如果未能解决你的问题,请参考以下文章
在 android 4.3 api 18 上更改 ActionBarActivity 的主题