我正在使用 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;
}
我的问题
我的解决方案只是不预先注册模式,而是从干净的模式注册表开始。 kafka-streams 应用程序自动注册了相关模式。
我猜测我注册原始模式的方式不太正确。