SchemaCompatibilityException
data
schema_error
ai_generated
true
Kafka Connect Avro 反序列化失败:新 schema 版本中删除了没有默认值的字段
Kafka Connect Avro deserialization fails: field removed in new schema version without default
ID: data/kafka-connect-avro-schema-evolution-field-removal
90%修复率
88%置信度
1证据数
2023-11-20首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| Confluent Schema Registry 7.4+ | active | — | — | — |
| Apache Avro 1.11.0+ | active | — | — | — |
| Kafka Connect 3.4+ | active | — | — | — |
根因分析
Avro schema 演变允许添加带默认值的字段,但不允许删除字段;删除之前存在的字段而不提供默认值会破坏向后兼容性。
English
Avro schema evolution allows adding fields with defaults but not removing fields; a schema that removes a previously existing field without providing a default value breaks backward compatibility.
官方文档
https://docs.confluent.io/platform/current/schema-registry/avro.html#backward-compatibility解决方案
-
注册新 schema 版本,将删除的字段重新添加为可选并带 null 默认值:`{"name": "removedField", "type": ["null", "string"], "default": null}` -
如果可能,使用 FORWARD 兼容性模式的 schema 演变,允许删除但要求新字段有默认值。
-
实现自定义反序列化器,使用包含可选已删除字段的 reader schema。
无效尝试
常见但无效的做法:
-
70% 失败
Breaks all future schema validation and can cause data loss for downstream consumers.
-
50% 失败
Schema Registry enforces compatibility based on schema ID; editing schema after registration may conflict with existing versions.