google.protobuf.struct.proto 上的 Kafka 架构注册表 409s

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

我正在使用 Protobuf 作为消息模式构建 Kafka Streams 应用程序。目前,应用程序本身只是从一个主题传递到另一个主题。 我使用 Confluence 平台一体化 docker-compose 文件在本地运行 Kafka。

我的一个架构 (

foo.proto
) 使用
Struct
字段,因此在启动我的应用程序之前,我已在架构注册表中注册了
foo.proto
struct.proto

当我启动我的应用程序时,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. 为什么架构注册表将这些字段视为具有不同的类型?它不能理解命名空间引用吗?
apache-kafka protocol-buffers apache-kafka-streams
1个回答
0
投票

我的解决方案只是不预先注册模式,而是从干净的模式注册表开始。 kafka-streams 应用程序自动注册了相关模式。

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

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