这更像是一个系统设计问题。
假设我有一个微服务架构,并且我有X个实例的Service B
(用于负载均衡HTTP请求到该服务)。但是,Service B
也是某个Kafka主题的消费者。如何避免处理相同的消息X次(X是Service B
的实例数)?如果处理是幂等的,那么“至少一次”可能是可以接受的。它不需要是“确切一次”,但不能是“X次”。
服务A可以是订单服务。它会向Orders topic发送关于用户下订单的消息。
服务B可以是支付服务。它从Orders topic消费消息以向用户收费。
为订单付款可能是一个幂等操作。但即使如此,如果我有10个支付服务实例,我也不想浪费CPU和IO来执行10次相同的操作。
即使分区是答案,如果我们比分区还有更多的特定微服务实例怎么办?