Apache kafka Kafka接收器连接器失败:未找到架构;错误代码:40403

Apache kafka Kafka接收器连接器失败:未找到架构;错误代码:40403,apache-kafka,avro,confluent-schema-registry,Apache Kafka,Avro,Confluent Schema Registry,我有一个具有以下配置的接收器连接器 { "name": "sink-test-mariadb-MY_TOPIC", "config": { "connector.class":"io.confluent.connect.jdbc.JdbcSinkConnector", "tasks.max":"10", "topics":"MY_TOPIC", "co

我有一个具有以下配置的接收器连接器

{
    "name": "sink-test-mariadb-MY_TOPIC",
    "config": { 
                "connector.class":"io.confluent.connect.jdbc.JdbcSinkConnector",
                "tasks.max":"10",
                "topics":"MY_TOPIC",
                "connection.url":"jdbc:mariadb://localhost:3306/myschema?user=myuser&password=mypass",
                "auto.create":"false",
                "auto.evolve":"true",
                "table.name.format":"MY_TABLE",
                "pk.mode":"record_value",
                "pk.fields":"ID",
                "insert.mode":"upsert",
                "transforms":"ExtractField",
                "transforms.ExtractField.type":"org.apache.kafka.connect.transforms.ExtractField$Value",
                "transforms.ExtractField.field":"data"
        }
}
一段时间后,连接器的所有任务都会失败,并出现以下错误:

{
    "state": "FAILED",
    "trace": "org.apache.kafka.connect.errors.DataException: MY_TOPIC
                at io.confluent.connect.avro.AvroConverter.toConnectData(AvroConverter.java:95)
                at org.apache.kafka.connect.runtime.WorkerSinkTask.convertMessages(WorkerSinkTask.java:468)
                at org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:301)
                at org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:205)
                at org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:173)
                at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:170)
                at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:214)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:748)
            Caused by: org.apache.kafka.common.errors.SerializationException: Error retrieving Avro schema for id 802
            Caused by: io.confluent.kafka.schemaregistry.client.rest.exceptions.RestClientException: Schema not found; error code: 40403
                at io.confluent.kafka.schemaregistry.client.rest.RestService.sendHttpRequest(RestService.java:202)
                at io.confluent.kafka.schemaregistry.client.rest.RestService.httpRequest(RestService.java:229)
                at io.confluent.kafka.schemaregistry.client.rest.RestService.getId(RestService.java:409)
                at io.confluent.kafka.schemaregistry.client.rest.RestService.getId(RestService.java:402)
                at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getSchemaByIdFromRegistry(CachedSchemaRegistryClient.java:119)
                at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getBySubjectAndId(CachedSchemaRegistryClient.java:192)
                at io.confluent.kafka.schemaregistry.client.CachedSchemaRegistryClient.getById(CachedSchemaRegistryClient.java:168)
                at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer.deserialize(AbstractKafkaAvroDeserializer.java:121)
                at io.confluent.kafka.serializers.AbstractKafkaAvroDeserializer.deserializeWithSchemaAndVersion(AbstractKafkaAvroDeserializer.java:194)
                at io.confluent.connect.avro.AvroConverter$Deserializer.deserialize(AvroConverter.java:120)
                at io.confluent.connect.avro.AvroConverter.toConnectData(AvroConverter.java:83)
                at org.apache.kafka.connect.runtime.WorkerSinkTask.convertMessages(WorkerSinkTask.java:468)
                at org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:301)
                at org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:205)
                at org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:173)
                at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:170)
                at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:214)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:748)",
    "id": 0,
    "worker_id": "localhost:8083"
}
连接器设法将主题与tha数据库同步,但它突然无故失败。我也非常确定模式在那里。它的主题出现在通过调用schema registry API返回的列表中
localhost:8081/subjects

[
  ...
  MY_TOPIC-value
  ...
]

卡夫卡主题上的消息使用模式注册表中的模式的不同版本进行序列化。它可能是由将模式写入不同模式注册表的工具生成的,或者是在不同的环境中生成的?为了能够对其进行反序列化,Kafka Connect需要能够检索主题Kafka消息开头的魔法字节中的模式ID

架构注册表中不存在架构,如下所示:

GET /schemas/ids/803
 { "error_code": 40403, "message": "Schema not found" }
您可以通过查看

curl -s "http://localhost:8081/subjects/MY_TOPIC-value/versions/3/"|jq '.id'

GET/schemas/ids/803
的输出是什么?()@RobinMoffatt
{“error_code”:40403,“message”:“Schema not found”}
如何
curl-shttp://localhost:8081/subjects/MY_TOPIC-value/versions/“
?@RobinMoffatt感谢您的及时回复。我得到的答复是
[3]
谢谢你的回答!我明白你的意思,但在我的情况下,这没有意义。昨天我遇到了同样的问题,为了解决它,我停止了连接器,删除了主题和主题。然后我重新创建了主题,并在其中推送了相同的消息,然后启动了接收器连接器,直到今天出现了相同的错误。我打赌是在其他地方的另一个进程上写入相同的主题。@Giorgosmyriantous还确保
键.converter
未设置为Avro并尝试自己进行ID查找(假设您有非空键)@cricket_007我非常确定这些键是字符串格式的,因为我正在使用第三方工具来生成主题中的数据(该工具无论如何都不支持avro键)@Giorgosmyriantous好的。我的观点是,如果主题数量较少并且假设id是连续的,那么id 802的Avro模式似乎相当大。可能发生的情况是,AvroConverter看到您的字符串键以Avro魔术字节(
0x0
)开始,然后检查接下来的四个UTF-8字节,并解析为
802
的整数。如果使用字符串或ByteArray转换器,则不会发生这种情况