Apache kafka 无效值:空值用于必填字段:\";空\";,架构类型:字符串\n\t
我们正在升级到Confluent Platform 5.5.2,升级后,我们的一个Kafka JDBC接收器连接器(不是全部)开始出现以下错误日志问题Apache kafka 无效值:空值用于必填字段:\";空\";,架构类型:字符串\n\t,apache-kafka,avro,apache-kafka-connect,confluent-schema-registry,Apache Kafka,Avro,Apache Kafka Connect,Confluent Schema Registry,我们正在升级到Confluent Platform 5.5.2,升级后,我们的一个Kafka JDBC接收器连接器(不是全部)开始出现以下错误日志问题 org.apache.kafka.connect.errors.ConnectException:错误处理程序中超出了容差\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOp
org.apache.kafka.connect.errors.ConnectException:错误处理程序中超出了容差\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOperator.java:178)\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execute(RetryWithToleranceOperator.java:104)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.convertAndTransformRecord(WorkerSinkTask.java:495)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.convertMessages(WorkerSinkTask.java:472)\n\tat org.apache.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:328)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask(WorkerSinkTask.java:232)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:204)\n\tat org.apache.kafka.connect.connect.runtime.WorkerSinkTask.exe(WorkerSinkTask.java:235)\n\tat java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)\n\tat java.util.concurrent.FutureTask.run(FutureTask.java:266)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\n使用者:org.apache.kafka.connect.errors.SchemaBuilderException:无效的默认值\n\tat org.apache.kafka.connect.data.SchemaBuilder.defaultValue(SchemaBuilder.java:131)\n\tat io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1812)\n\tat io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1567)\n\tat io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1687)\n\tat io.confluent.connect.avro.AvroData.toConnectSchema(AvroData.java:1543)\n\tat io.confluent.connect.avro.AvroData.toConnectData(AvroData.java:1226)\n\tat io.confluent.connect.avro.AvroConverter.toConnectData(AvroConverter.java:108)\n\tat org.apache.kafka.connect.storage.Converter.toConnectData(Converter.java:87)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.lambda$convertAndTransformRecord$1(WorkerSinkTask.java:495)\n\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndRetry(RetryWithToleranceOperator.java:128)\n\t org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOperator.java:162)\n\t…13更多\n原因:org.apache.kafka.connect.errors.DataException:无效值:null用于必填字段:\“null\”,架构类型:字符串\n\t org.apache.kafka.connect.data.ConnectSchema.validateValue(ConnectSchema.java:220)\n\tat org.apache.kafka.connect.data.ConnectSchema.validateValue(ConnectSchema.java:213)\n\tat org.apache.kafka.connect.data.schemabilder.defaultValue(schemabilder.java:129)\n\t…23更多\n
有人遇到同样的问题并已经解决了吗
我们还没有将Schema Registry升级到新版本(它仍然使用5.0.0版本),升级Schema Registry可能有助于解决此问题
更新:
- 我们确实将Schema Registry升级到了相同的Confluent平台版本,但错误仍然在发生
- 我已查明根本原因是,我的AVRO架构中有一个字段“has
not includetype
值。在将“null”
值添加到“null”
后,问题已得到解决type
default
字段中不一致。
当字段的类型不允许null
时,请检查您是否从未设置“默认值”:null
例:
坏的字段:
{
"default": null,
"name": "field_name",
"type": "string"
}
良好字段:
{
"name": "field_name",
"type": "string"
}
{
"default": null,
"name": "field_name",
"type": [
"null",
"string"
]
}
或,良好字段:
{
"name": "field_name",
"type": "string"
}
{
"default": null,
"name": "field_name",
"type": [
"null",
"string"
]
}
有什么解决方案吗?我在confluent-6.0.0上遇到了同样的异常。@felicienb,没有,还在等待其他人的响应。谢谢,我发现我的AVRO模式中的一个字段在“type”中没有“null”大小写。添加“null”后,问题已得到解决into键入
确认这是解决我帖子中问题的正确解决方案。谢谢!我使用的正是“GOOD field”中的内容默认值为null,类型为。但它不起作用。这两种情况——传递可选字段和从json中跳过可选字段——都不起作用。我确认了这一点,看到了更多的线程/问题和bug-/。想知道这对您有何作用?