我们计划在 Kafka 中使用单个主题,我们将在其中发布与域相关的事件。IDL 定义类似于:
protocol KafkaTopic {
record EventA {
int anIntHappened;
}
record EventB {
string aStringHappened;
}
}
所以我们有一个单一的渠道和多种类型的流经该渠道。所有编码都是使用SpecificRecordBase
派生类完成的。
我认为现在我们有几个选择:
- 使用其关联的模式对每条消息进行编码。缺点是我们为每条消息引入了开销。
- 在 IDL 定义中创建联合类型
KafkaTopicMessage
并发送不带模式的消息。然后我不知道使用旧模式编译的客户端会发生什么。希望没有错,但是联合中的这种额外包装对我来说似乎不自然,但在这种情况下它可能是正确的。 - 让客户选择他们感兴趣的几个模式并在消费者端创建联合模式。生产者将发送没有任何联合的普通模式。我什至不知道这是否可行。
所以问题是,将 Avro 编码与 Kafka 主题消息结合使用时的常见模式是什么?