gpt4 book ai didi

apache-kafka - Kafka 主题和微服务的多个实例

转载 作者:行者123 更新时间:2023-12-05 00:53:03 25 4
gpt4 key购买 nike

这更像是一个系统设计问题。

假设我有一个微服务架构,并且我有 Service BX 个实例(用于对服务的 HTTP 请求进行负载平衡)。但是,Service B 也是某个 Kafka 主题的消费者。如何避免处理相同的消息 X 次(X 是 Service B 的实例数)?如果处理是幂等的,至少一次 可能没问题。不需要恰好一次,但不能X次

服务 A 可以是订单服务。它会生成有关用户向Orders topic下订单的消息。

服务 B 可以是支付服务。它使用来自 Orders 主题 的消息来向用户收费。

为订单付款可能是幂等操作。但是,如果我有 10 个支付服务实例,我不想浪费 CPU 和 IO 做 10 次。

即使分区是解决方案,如果我们的特定微服务实例比分区多怎么办?

最佳答案

Kafka 消费群体

当你有一个服务的 x 实例并且你希望消息只被服务消费一次时,这就是 Kafka 的 consumer group 概念需要处理的事情.

本质上,您需要为您的服务实例指定一个通用 kafka 消费者组 ID,然后 kafka 会负责将主题的分区分配给您服务的不同消费者实例,这样就不会有任何消息被您的服务消耗两次。

在您正在使用的 kafka 消费者库中的 kafka 消费者配置中,会有一个消费者组 ID 的配置。您只需要确保为您的一组服务实例分配了与该配置相同的消费者组 ID 值。

举例说明

如果您的服务 B10 个实例,则您为所有 10 个实例指定一个 通用 kafka 消费者组 ID,例如 服务 BConsumerGroup。当一个具有 10 个分区的 kafka 主题开始消费时,kafka 负责将主题的分区分配给消费者组 serviceBConsumerGroup 的所有实例。所以本质上它会将每个分区分配给每个实例(当有 10 个服务实例和 10 个主题分区时)。如果服务有 5 个实例,kafka 主题有 10 个分区,Kafka 会为每个实例分配 2 个分区供消费。

一些关于 Kafka 消费者群体的引用资料:

关于apache-kafka - Kafka 主题和微服务的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68565621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com