apache-kafka - 无效值:null 用于必填字段:\"null\",架构类型:STRING\n\tat
问题描述
我们正在升级到 Confluent Platform 5.5.2,升级后,我们的一个 Kafka JDBC Sink 连接器(不是全部)开始出现以下错误日志的问题
org.apache.kafka.connect.errors.ConnectException: Tolerance exceeded in error handler\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.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:328)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:232)\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:204)\n\tat org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:185)\n\tat org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.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)\nCaused by: org.apache.kafka.connect.errors.SchemaBuilderException: Invalid default value\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\tat org.apache.kafka.connect.runtime.errors.RetryWithToleranceOperator.execAndHandleError(RetryWithToleranceOperator.java:162)\n\t... 13 more\nCaused by: org.apache.kafka.connect.errors.DataException: Invalid value: null used for required field: \"null\", schema type: STRING\n\tat 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.SchemaBuilder.defaultValue(SchemaBuilder.java:129)\n\t... 23 more\n
有人遇到同样的问题并且已经解决了吗?
我们还没有将 Schema Registry 升级到更新的版本(它仍然使用 5.0.0 版本),升级 Schema Registry 可能有助于解决问题吗?
更新:
- 我们确实将 Schema Registry 升级到了相同的 Confluent Platform 版本,但错误仍然存在。
固定的:
- 我已经弄清楚根本原因是我的 AVRO 架构中有一个字段
type
不包含"null"
值。"null"
增值后type
问题已解决。
解决方案
您的错误很可能是您在现场的某个主题的 avro 架构不一致default
。"default": null
当type
您的字段不允许时,请检查您是否从未设置过null
。
前任:
坏字段:
{
"default": null,
"name": "field_name",
"type": "string"
}
好领域:
{
"name": "field_name",
"type": "string"
}
或者,良好的领域:
{
"default": null,
"name": "field_name",
"type": [
"null",
"string"
]
}
推荐阅读
- php - Laravel 跨包的模型关系
- angular - 如何在 Typescript 中动态设置类的函数?
- android - 以编程方式将菜单操作栏图标背景颜色更改为不透明圆圈(不是整个工具栏)
- c++ - 不同的 C/C++ 库相互崩溃;可能干扰 poll() 和 select()?
- python - 在高级功能中访问低级功能选项的清晰方法?
- angular - 在 AngularFire2 中使用 sendEmailVerification 方法时,Firebase 验证电子邮件问题
- node.js - 使用 Mongoose 缓解 MongoDB 注入攻击
- angular - Angular 6:无法从路由解析器获取数据
- python - 使用 PyQt5 循环更新和显示图片
- c# - 密码哈希不匹配