首页 > 解决方案 > auto.register.schemas 是否应该在修改 .avsc 时在模式注册表中创建一个新版本?

问题描述

我注意到一个奇怪的事情,试图遵循关于 Kafka 模式注册表和简单生产者的教程。.avsc如果我更改文件,它不会在模式注册表中自动生成新模式。我做的步骤:

  1. 启动本地模式注册表、Kafka 和 Zookeeper
  2. 创建.avsc具有 2 个字符串字段的文件
  3. 使用创建 Java 生产者KafkaProducer- 我正在使用 avro-maven-plugin 从文件中生成 Java 类.avsc
  4. 编译并运行生产者——生成新的 Java 类并生成记录。此外,在模式注册表中会出现一个新条目。
  5. 修改.avsc文件 - 在那里添加一个新字段
  6. 编译 - 使用新字段生成新的 Java 类。我将此字段添加到生产者代码中。
  7. 运行生产者- 没有记录产生,没有在模式注册表中创建新版本的模式,但我也没有例外。

在最后一步中,我希望auto.register.schemas创建一个新的模式版本,但它没有。在我使用模式注册表中的 curl 手动创建它之后,记录开始再次正确生成。

我担心没有例外,这使得很难理解为什么不产生记录。

标签: javaapache-kafkaconfluent-schema-registry

解决方案


如果您只使用一条(或几条)消息调用 send 方法,那么它不会立即发送到代理,您需要刷新生产者才能做到这一点。理想情况下,通过向 JVM 添加关闭挂钩

仅在记录发送和序列化时才需要注册模式


推荐阅读