google.protobuf.struct.proto上的Kafka模式注册表409s

时间:2020-10-19 19:17:58

标签: apache-kafka protocol-buffers apache-kafka-streams

我正在使用Protobuf构建用于消息模式的Kafka Streams应用程序。目前,应用程序本身只是从一个主题到另一个主题。 我正在使用Confluent platform all-in-one docker-compose文件在本地运行Kafka。

我的一个架构(foo.proto)使用一个Struct字段,因此在启动我的应用之前,我已经在架构注册表中注册了foo.protostruct.proto。 / p>

启动我的应用程序时,protobuf序列化程序将运行一个名为resolveDependencies的方法,从而使其重新注册subtruct.proto。 (本地)模式注册表返回带有消息的409:

Schema being registered is incompatible with an earlier schema

最初注册struct.proto和应用程序的代码都使用3.12库的版本protobuf-java。 查看注册表的docker日志,他们通过以下消息为我提供了更多详细信息:

Found incompatible change: Difference{fullPath='#/ListValue/1', type=FIELD_NAMED_TYPE_CHANGED}

查看该特定字段,已经注册的架构具有以下定义

message ListValue {
  repeated Value values = 1;
}

以及我的应用程序尝试注册的模式

message ListValue {
  repeated .google.protobuf.Value values = 1;
}

我的问题

  1. 为什么kafka-streams应用程序尝试重新注册依赖项?
  2. 注册该依赖项时,为什么kafka-streams应用最终以该命名空间类型名称结尾?
  3. 为什么架构注册表认为这些字段具有不同的类型?它不能理解命名空间引用吗?

1 个答案:

答案 0 :(得分:0)

在我的情况下,解决方案是不预先注册架构,而是从干净的架构注册表开始。 kafka-streams应用会自动注册相关架构。

我猜我注册原始模式的方式不太正确。

相关问题