【问题标题】:How to scale up parallel consumers in microservices如何在微服务中扩展并行消费者
【发布时间】:2018-04-17 14:25:43
【问题描述】:

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

考虑三个事件:

  1. 创建产品 1
  2. 创建配置文件 1
  3. 删除产品 1

我们希望使用这些事件在服务之间“复制”数据。当使用一个消费者时,所有的消息都会按照正确的顺序执行,并且数据库是一致的。

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

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

【问题讨论】:

    标签: architecture rabbitmq apache-kafka microservices scaling


    【解决方案1】:

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

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

    【讨论】:

    • 要对此进行扩展,您必须实现自己的分区器类 (kafka.apache.org/0110/javadoc/org/apache/kafka/clients/producer/…),并且在 Kafka 中处理您自己的分区键时存在一些问题。如果任何一个“逻辑组”的容量比其他分区大得多,那么它的分区可能会超出其他分区的规模,并且需要特殊维护才能保持同一主题的一部分。
    • 所以在 RabbitMQ 中,我想你只需为可以同时处理的消息创建队列
    猜你喜欢
    • 2016-07-12
    • 2020-05-26
    • 2015-03-06
    • 2018-09-30
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    相关资源
    最近更新 更多