gpt4 book ai didi

apache-kafka - 删除列时的 Kafka Connect Schema 演变

转载 作者:行者123 更新时间:2023-12-05 05:10:04 28 4
gpt4 key购买 nike

假设我们有如下设置。

enter image description here架构演变兼容性设置为 BACKWARD。

JDBC Source Connector 轮询从 DB 写入 Kafka 主题的数据。HDFS Sink Connector 从 Kafka 主题读取消息并以 Avro 格式写入 HDFS。

按照我理解的流程进行。

  1. JDBC Source Connector 查询 DB 并从 ResultSet 的 JDBC 元数据生成 Schema V1。V1 具有 col1、col2、col3。Schema V1 在 Schema Registry 中注册。
  2. 源连接器从数据库轮询数据并将消息写入 V1 架构中的 Kafka 主题。
  3. (问题 1)当 HDFS Sink 连接器从主题中读取消息时,它是否根据模式注册表中的 V1 模式验证消息?

下一个数据库架构已更改。列“col3”已从表中删除。

  1. 下次 JDBC Source 轮询 DB 时发现模式已更改,生成新的 Schema V2 (col1,col2) 并将 V2 注册为 Schema Registry。
  2. Source Connect 继续轮询数据并写入 V2 架构中的 Kafka 主题。
  3. 现在 Kafka 主题可以在 V1 和 V2 架构中包含消息。
  4. (问题 2)当 HDFS 接收器连接器读取消息时,它现在是否根据 Schema V2 验证消息?

在向后兼容性下的 Confluent 文档中解决了这个问题? :[ https://docs.confluent.io/current/schema-registry/avro.html#schema-evolution-and-compatibility]

An example of a backward compatible change is a removal of a field. A consumer that was developed to process events without this field will be able to process events written with the old schema and contain the field – the consumer will just ignore that field.

最佳答案

注册表仅在注册新模式时进行验证。

因此,如果/当源连接器检测到更改时,则在注册表端进行验证

对于 HDFS 连接器,有一个单独的 schema.compatibility 属性,它对内存中保存的记录和任何新记录应用投影。当您获得具有新架构的记录并进行向后兼容更新时,所有尚未刷新的消息都将更新以在写入 Avro 容器文件时保留新架构。

另外:仅仅因为注册表认为它是倒退的,并不能保证接收器连接器确实...源代码中的验证是不同的,我们遇到了多个问题:/

关于apache-kafka - 删除列时的 Kafka Connect Schema 演变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57072035/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com