我正在使用 Kafka 来解耦我的服务,但我对服务消费和产生输入和输出的方式有一些想法。
如果我有一个服务 A,它从我无法控制的某个外部服务中获取数据,我将被迫适应外部系统提供的数据格式(域)。按照这种做法,我的服务 A 将其结果以自己的格式(域)推送到主题。
顺便说一句,我有一个服务 B,它与服务 A 做类似的事情,但使用其他一些外部服务,并且有自己的数据格式(域),它推送到一个单独的主题。
现在,A 和 B 产生的数据的语义相似,但又不一样。但是,管道中的下一步是服务 C,它应该消耗 A 和 B 产生的东西,用它做一些事情并吐出结果。
C 是否应该只知道如何从一个地方使用数据,这意味着 A 和 B(以及未来的任何其他)需要在 C 特定域中产生它们的输出?这意味着,如果 C 消费者改变了它的域,A、B 和任何其他生产者都必须改变,我不喜欢这样。另外,如果我添加另一个消费者 D,例如,这意味着 A 和 B,使用这个类比,应该知道 D 也是他们的消费者,这对我来说看起来很可怕。
我在想 C 应该对它的输入负责,这意味着它依赖于 A 和 B 模型(以及任何其他可能产生自己数据的模型)。这也意味着,当添加新源时,必须更改 C 以包含该数据。
实际上,我倾向于使用 ManySources-OneSink 组件,而不是 OneSource-ManySinks。
有没有首选的做法?