Apache kafka 删除列时Kafka连接模式的演变

Apache kafka 删除列时Kafka连接模式的演变,apache-kafka,apache-kafka-connect,confluent-platform,confluent-schema-registry,Apache Kafka,Apache Kafka Connect,Confluent Platform,Confluent Schema Registry,假设我们有如下设置 架构演化兼容性设置为向后 JDBC源连接器轮询数据库中写入Kafka主题的数据。HDFS接收器连接器从Kafka主题读取消息,并以Avro格式写入HDFS 按照我所理解的流程 JDBC源连接器查询数据库并从ResultSet的JDBC元数据生成模式V1。V1有col1、col2、col3。模式V1在模式注册表中注册 源连接器轮询DB中的数据,并将消息写入V1架构中的Kafka主题 (问题1)当HDFS接收器连接器从主题读取消息时,它是否根据架构注册表中的V1架构验证消息 下

假设我们有如下设置

架构演化兼容性设置为向后

JDBC源连接器轮询数据库中写入Kafka主题的数据。HDFS接收器连接器从Kafka主题读取消息,并以Avro格式写入HDFS

按照我所理解的流程

  • JDBC源连接器查询数据库并从ResultSet的JDBC元数据生成模式V1。V1有col1、col2、col3。模式V1在模式注册表中注册
  • 源连接器轮询DB中的数据,并将消息写入V1架构中的Kafka主题
  • 问题1)当HDFS接收器连接器从主题读取消息时,它是否根据架构注册表中的V1架构验证消息 下一个数据库模式已更改。列“col3”从表中删除

  • 下次JDBC Source轮询DB时,它会看到模式已经更改,生成新的模式V2(col1,col2),并且寄存器V2是模式注册表
  • Source Connect继续轮询数据并写入V2架构中的Kafka主题
  • 现在,卡夫卡主题可以在V1和V2模式中包含消息
  • 问题2)当HDFS接收器连接器读取消息时,它现在是否根据模式V2验证消息
  • 这是在向后兼容性?下的合流文档中解决的情况: [

    向后兼容更改的一个示例是删除字段。a 为处理没有此字段的事件而开发的使用者将 能够处理使用旧模式编写的事件并包含 字段–消费者将忽略该字段


    注册表仅在注册新架构时进行验证

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

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


    旁白:仅仅因为注册表认为它是向后的,并不保证接收器连接器会这样做……源代码中的验证是不同的,并且我们遇到了多个问题://

    这是否意味着如果兼容性设置为“向前”,并在记录中添加了一个新列。hdfs接收器连接器将继续写入记录对于hdfs avro文件中没有新列值的hdfs???已经为相同的创建了关于kafka connect hdfs的报告:,在这种情况下获得更多的输入将是非常好的。@kaushikHS建议在存储连接器中保持向后兼容性,因为您将始终在过去查询数据。此外,添加新的(可选)字段是向后兼容的更改