【RabbitMQ】如何保证消息队列的高可用
一、前言
一家非常大的互联网公司,非常核心的系统,就是忽略了MQ,没考虑MQ如何保证高可用。如果MQ挂了怎么办?导致几个小时系统不可用,公司损失几千万。team背锅。
二、RabbitMQ的高可用
1、单机模式
单机模式,一般就是做demo玩玩,线上没有人这么用。
2、普通模式
1)缺点1:可能会在rabbitMQ集群内部产生大量的数据传输。
2)缺点2:可用性几乎没有什么保障,如果queue所在的节点宕机了。就导致queue的数据就丢失了。没有办法消费了。
3、镜像模式
每个节点上都有queue的一个完整镜像,就是包含了这个queue全部数据的意思。所以这个集群模式叫作镜像集群模式。
任何一个节点宕机了,没问题。其他节点还包含了这个queue的完整数据,别的consumer都可以到其他的节点上去消费数据,都是ok的。
缺点:不是分布式的,如果这个queue的数据很大,大到这个机器上的容量如何容纳了,该怎么办呢?
怎么开启镜像集群模式呢?在管理控制台新增这个策略。
三、Kafka的高可用
kafka是分布式的。
如果没有高可用保障,假设第二台集群宕机了,会导致topic的1/3数据丢失。做不到高可用。
后来的版本升级中,通过副本,保证了高可用。如下图
消费者只能从leader里面读数据。此时高可用架构就出来了。假设某一台宕机了,上面的leader就没了。但是此时,别的机器上还有follower。此时kafka会自动感知到leader死了。会将其他的follower给选举出来,作为1个leader。
本文地址:https://blog.csdn.net/qq_26545305/article/details/108197714
推荐阅读