我们在堆栈中使用Kafka, Kafka connect和Schema-registry。版本为2.8.1(Confluent 6.2.1)。我们使用Kafka connect的configs(key)。转换器和value.converter)与value: io.confluent.connect.avro.AvroConverter.
它自动为主题注册一个新的模式。但是有一个问题,AvroConverter没有为新模式指定主题级别的兼容性当我们试图通过REST API/config获得模式配置时出现错误:主题'schema-value'没有配置主题级兼容性
如果指定请求参数defaultToGlobal,则返回全局兼容性。但这对我们不起作用,因为我们不能在请求中指定它。我们使用第三方UI: AKHQ.
如何通过AvroConverter注册新模式时指定主题级兼容性?
最后我检查了一下,唯一可以提供给任何Avro序列化器配置的属性,影响注册中心HTTP客户端是url,是否自动注册,以及是否使用最新的模式版本。
在模式注册期间没有设置主题级别或全局配置的属性(甚至方法调用)
欢迎您查看源代码以验证此
但是它不能为我们工作,因为我们不能在请求中指定它。我们使用第三方UI: AKHQ
听起来不像是连接问题。为AKHQ项目创建PR以修复请求
从2021年10月26日起,我使用了akhq 0.18.0 jar和confluent-6.2.0, akhq中的模式注册表工作正常。
注意:我也使用了confluent-6.2.1,看到了完全相同的错误。因此,您可能需要切换回6.2.0来尝试一下。
p。S:只在我的本地开发环境,VirtualBox, Ubuntu中使用。
@OneCricketeer是正确的。不幸的是,在AvroConverter中无法指定主题级兼容性。
我只看到两个解决方案:
- 重写AvroConverter以添加属性和功能,以便在注册模式后向API/config/{subject}发送额外的请求。
- 贡献给AKHQ来支持defaultToGlobal参数。但是在这种情况下,我们还需要反向移植模式注册表RestClient。Github问题
第二种解决方案更可取,直到用户在转换器的设置中指定兼容级别。如果在原生AvroConverter中没有这个设置,我们就必须为每个编写模式的客户端使用自定义转换器。这需要很多努力。
对于我来说,这看起来很奇怪,为什么客户端不能在注册模式时设置兼容性,而必须使用不同的请求。