【发布时间】:2019-11-26 01:29:46
【问题描述】:
假设我们有如下设置。
JDBC Source Connector 从 DB 轮询数据写入 Kafka 主题。HDFS Sink 连接器从 Kafka 主题读取消息并以 Avro 格式写入 HDFS。
按照我的理解顺势而为。
- JDBC Source Connector 查询 DB 并从 ResultSet 中的 JDBC 元数据生成 Schema V1。V1 有 col1,col2,col3。Schema V1 已在 Schema Registry 中注册。
- 源连接器轮询数据库中的数据并将消息写入 V1 架构中的 Kafka 主题。
- (问题 1)当 HDFS Sink 连接器从主题中读取消息时,它是否根据模式注册表中的 V1 模式验证消息?
下一个数据库架构已更改。列“col3”已从表中删除。
- 下次 JDBC Source 轮询 DB 时,发现架构已更改,生成新的 Schema V2 (col1,col2) 并且寄存器 V2 是 Schema Registry。
- Source Connect 继续轮询数据并写入 V2 架构中的 Kafka 主题。
- 现在 Kafka 主题可以包含 V1 和 V2 模式中的消息。
- (问题 2)当 HDFS Sink 连接器读取消息时,它现在是否根据 Schema V2 验证消息?
这就是向后兼容性下的 Confluent 文档中解决的情况? : [https://docs.confluent.io/current/schema-registry/avro.html#schema-evolution-and-compatibility]
向后兼容更改的一个示例是删除字段。一种 为处理没有此字段的事件而开发的消费者将 能够处理使用旧模式编写的事件并包含 字段——消费者将忽略该字段。
【问题讨论】:
标签: apache-kafka apache-kafka-connect confluent-platform confluent-schema-registry