kafka连接器转换器根据主题名称检索模式



如果模式名不遵循topicNameStrategy的模式,即-value连接器将抛出一个异常:

Caused by: org.apache.kafka.common.errors.SerializationException: Error retrieving Avro value schema version for id 11025
Caused by: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: Subject not found. io.confluent.rest.exceptions.RestNotFoundException: Subject not found.
io.confluent.rest.exceptions.RestNotFoundException: Subject not found.
at io.confluent.kafka.schemaregistry.rest.exceptions.Errors.subjectNotFoundException(Errors.java:51)
at io.confluent.kafka.schemaregistry.rest.resources.SubjectsResource.lookUpSchemaUnderSubject(SubjectsResource.java:93)

查看模式注册表SubjectsResource.java中lookUpSchemaUnderSubject的模式注册表代码,它表明客户端试图通过主题查找模式,而subjectName是由topicNameStrategy构造的

为什么不通过ID作为全局ID在每个模式的每个版本中都是唯一的呢?或者至少在找不到主题时才返回到按ID查找?

一个可能的原因-全局ID没有跨记录兼容性的概念。这只是在主题版本范围内定义的东西。

作为一种解决方法,您可以简单地提取错误中列出的全局ID,然后将其作为所需的主题发布到注册表,并重新启动连接器。

否则,如果数据已经是具有注册表中存在的ID的字节,则不要使用除ByteArrayConverter之外的任何转换器。否则,如果您使用AvroConverter,例如,您最终会得到一个模式类型为bytes,而不是您的真实记录。

最新更新