我有一个基于 Spring-Boot 的小型原型,可以使用 Protobuf 将消息发布到 Kafka 集群。我正在使用融合序列化程序:
io.confluent.kafka.serializers.protobuf.KafkaProtobufSerializer
io.confluent.kafka.serializers.protobuf.KafkaProtobufDeserializer
我还从 Confluent(最新版本)运行 Schema Registry 来处理 Protobuf 模式。一切都按预期工作。
现在,我想介绍 Cloudevents 规范(https://github.com/cloudevents/spec),但我很难理解它如何与 Confluent Schema Registry 一起工作。
Cloudevents 有一个 sdk模块,可以将消息直接序列化到 Protobuf。消息的data
部分是我的版本化有效负载应该去的地方,但是没有办法只为消息的一部分定义模式。为了更清楚:
CloudEvent event = CloudEventBuilder.v1()
.withId(UUID.randomUUID().toString())
.withType("example.vertx")
.withSource(URI.create("http://localhost"))
.withData(???) <-- HERE IS WHERE MY PAYLOAD SHOULD BE VERSIONED
.build();
一种解决方案是复制 Cloudevent protobuf架构,并在每个 protobuf 架构文件中简单地定义消息规范。这样做的缺点是我必须为每条新消息复制/粘贴 Cloudevents protobuf 模式。这将允许我在不使用任何 Cloudevent 库的情况下使用标准 Protobuf Kafka serde。有更好的解决方案吗?