对于一个新项目,我们正在考虑将微服务与RabbitMQ或Kafka一起使用。对于这两种技术,我都有同样的问题,但答案可能会有所不同。
考虑三个事件:
我们希望使用这些事件在服务之间“复制”数据。使用一个使用者时,所有消息都将以正确的顺序执行,数据库将保持一致。
但是,当这个消费者在处理消息时变慢时,可能想要并行添加另一个消费者。此时,不确定事件1是否在事件3之前执行,这可能导致数据库不一致(首先删除,然后创建)。
找到了有关该主题的一些信息here,但这两种解决方案似乎都难以实施。如何扩大这些消费者的规模?使用RabbitMQ或Kafka处理这个问题有什么不同吗?
答案 0 :(得分:2)
对于基于Kafka的实现,您只需要确保属于同一“逻辑组”(id?)的所有事件都登陆到同一分区 - 在这种情况下,您可以添加更多的使用者(最多分区数) )并行处理事件,但每个消费者只处理其逻辑组的事件。
您可以通过选择正确的密钥/分区方法来实现此行为 - 使用ID作为密钥,或者使用更复杂的分区实现。