# Kafka Connect Avro 反序列化失败：新 schema 版本中删除了没有默认值的字段

- **ID:** `data/kafka-connect-avro-schema-evolution-field-removal`
- **领域:** data
- **类别:** schema_error
- **错误码:** `SchemaCompatibilityException`
- **验证级别:** ai_generated
- **修复率:** 90%

## 根因

Avro schema 演变允许添加带默认值的字段，但不允许删除字段；删除之前存在的字段而不提供默认值会破坏向后兼容性。

## 版本兼容性

| 版本 | 状态 | 引入 | 弃用 |
|------|------|------|------|
| Confluent Schema Registry 7.4+ | active | — | — |
| Apache Avro 1.11.0+ | active | — | — |
| Kafka Connect 3.4+ | active | — | — |

## 解决方案

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

## 无效尝试

- **** — Breaks all future schema validation and can cause data loss for downstream consumers. (70% 失败率)
- **** — Schema Registry enforces compatibility based on schema ID; editing schema after registration may conflict with existing versions. (50% 失败率)
