如果模式名称不遵循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)
查看schema-registry www.example.com中lookUpSchemaUnderSubject的模式注册表代码SubjectsResource.java,可以看出客户端尝试通过主题查找模式,而subjectName由topicNameStrategy构造
为什么不只是通过ID,因为全局ID在每个版本的每个模式中确实是唯一的?或者至少在找不到主题的情况下退一步,通过ID查找?
1条答案
按热度按时间kmbjn2e31#
一个可能的原因是-全局ID没有跨记录兼容性的概念,这只是在主题版本的范围内定义的。
作为一种解决方法,您可以简单地提取错误中列出的全局ID,然后将其作为所需的主题发布到注册表,并重新启动连接器。
否则,如果数据已经是bytes,且注册表中存在该ID,则不要使用ByteArrayConverter以外的任何转换器。否则,如果使用AvroConverter,则最终得到的模式类型为
bytes
,而不是真实的的记录。