略难的题,这个地方非常适合装逼。
常规的方案无非就是使用双 Kafka 集群,勿论哪个发成功了都可以。但是要装逼就要讨论两个奇诡的做法,一个是将秒杀看做是一个类似于抽奖的过程,随机拒绝掉一部分人;另外一个就是直接去掉 Kafka,也不是不可以。
镜像问题:秒杀中 Redis 崩溃了怎么办? - 面试ICU (mianshi.icu)
这个问题本质上就是一个针对第三方中间件崩溃的容错问题。
那么在消息队列相关的容错中,最简单的做法就是使用双集群。当发消息到 A 集群上失败的时候,就转为发送到 B 集群上。如图: