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

其他格式: JSON · Markdown 中文 · English
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.

generic

官方文档

https://docs.confluent.io/platform/current/schema-registry/avro.html#backward-compatibility

解决方案

  1. 注册新 schema 版本,将删除的字段重新添加为可选并带 null 默认值:`{"name": "removedField", "type": ["null", "string"], "default": null}`
  2. 如果可能,使用 FORWARD 兼容性模式的 schema 演变,允许删除但要求新字段有默认值。
  3. 实现自定义反序列化器,使用包含可选已删除字段的 reader schema。

无效尝试

常见但无效的做法:

  1. 70% 失败

    Breaks all future schema validation and can cause data loss for downstream consumers.

  2. 50% 失败

    Schema Registry enforces compatibility based on schema ID; editing schema after registration may conflict with existing versions.