use.latest.version 配置不适用于 kafka 生产者和模式注册表

问题描述 投票:0回答:1

我在本地配置了一个 kafka 集群以及一个 schema 注册表实例,我对 use.latest.version 配置有点困惑。根据我在文档中读到的内容,此配置强制生产者的序列化程序使用在模式注册表中注册的最新版本的模式,无论被序列化的对象使用什么模式。

我的 Java 生产者有以下配置,它尝试发送 avro 序列化值:

Properties properties = new Properties();
properties.setProperty("bootstrap.servers", "localhost:9092");
properties.setProperty("key.serializer", StringSerializer.class.getName());
properties.setProperty("value.serializer", KafkaAvroSerializer.class.getName());
properties.setProperty("schema.registry.url", "http://localhost:8081");
properties.setProperty("auto.register.schemas", "false");
properties.setProperty("use.latest.version", "true");

一旦我尝试发送尚未注册的模式版本的对象,它就会失败(这是合理的,因为 auto.register.schemas 配置设置为 false)。但是,如果我为此主题值注册了两个版本的架构(v1 和 v2),并且我尝试发送架构 v1 的对象,则我使用的记录将使用 v1 进行序列化,而不是使用最新的 v2。仅供参考,我有一个 kafka 文件接收器连接器,它使用记录进行调试。是我这边的配置有问题还是我不明白这个配置的实际用途?

apache-kafka avro confluent-schema-registry
1个回答
0
投票

您需要在最后三个设置前加上

value.serializer.
前缀,因为这些是它的属性,而不是 ProducerConfig。事实上,您应该看到日志这样说 - 它们对于生产者来说是未知的配置

© www.soinside.com 2019 - 2024. All rights reserved.