如何在微服务中扩展并行使用者

时间:2017-11-05 08:46:43

标签: architecture rabbitmq apache-kafka microservices scaling

对于一个新项目,我们正在考虑将微服务与RabbitMQ或Kafka一起使用。对于这两种技术,我都有同样的问题,但答案可能会有所不同。

考虑三个事件:

  1. 创建产品1
  2. 创建个人资料1
  3. 删除产品1
  4. 我们希望使用这些事件在服务之间“复制”数据。使用一个使用者时,所有消息都将以正确的顺序执行,数据库将保持一致。

    但是,当这个消费者在处理消息时变慢时,可能想要并行添加另一个消费者。此时,不确定事件1是否在事件3之前执行,这可能导致数据库不一致(首先删除,然后创建)。

    找到了有关该主题的一些信息here,但这两种解决方案似乎都难以实施。如何扩大这些消费者的规模?使用RabbitMQ或Kafka处理这个问题有什么不同吗?

1 个答案:

答案 0 :(得分:2)

对于基于Kafka的实现,您只需要确保属于同一“逻辑组”(id?)的所有事件都登陆到同一分区 - 在这种情况下,您可以添加更多的使用者(最多分区数) )并行处理事件,但每个消费者只处理其逻辑组的事件。

您可以通过选择正确的密钥/分区方法来实现此行为 - 使用ID作为密钥,或者使用更复杂的分区实现。