欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

【RabbitMQ】如何保证消息队列的高可用

程序员文章站 2022-07-09 14:22:07
一、前言 一家非常大的互联网公司,非常核心的系统,就是忽略了MQ,没考虑MQ如何保证高可用。如果MQ挂了怎么办?导致几个小时系统不可用,公司损失几千万。team背锅。二、RabbitMQ的高可用 1、单机模式 单机模式,一般就是做demo玩玩,线上没有人这么用。 2、普通模式 1)缺点1:可能会在rabbitMQ集群内部产生大量的数据传输。 2)缺点2......

一、前言

       一家非常大的互联网公司,非常核心的系统,就是忽略了MQ,没考虑MQ如何保证高可用。如果MQ挂了怎么办?导致几个小时系统不可用,公司损失几千万。team背锅。

二、RabbitMQ的高可用

       1、单机模式

       单机模式,一般就是做demo玩玩,线上没有人这么用。

       2、普通模式

                           【RabbitMQ】如何保证消息队列的高可用

       1)缺点1:可能会在rabbitMQ集群内部产生大量的数据传输。

       2)缺点2:可用性几乎没有什么保障,如果queue所在的节点宕机了。就导致queue的数据就丢失了。没有办法消费了。  

       3、镜像模式 

          【RabbitMQ】如何保证消息队列的高可用

        每个节点上都有queue的一个完整镜像,就是包含了这个queue全部数据的意思。所以这个集群模式叫作镜像集群模式。

        任何一个节点宕机了,没问题。其他节点还包含了这个queue的完整数据,别的consumer都可以到其他的节点上去消费数据,都是ok的。

        缺点:不是分布式的,如果这个queue的数据很大,大到这个机器上的容量如何容纳了,该怎么办呢? 

        怎么开启镜像集群模式呢?在管理控制台新增这个策略。

三、Kafka的高可用

       kafka是分布式的。

                               【RabbitMQ】如何保证消息队列的高可用 

       如果没有高可用保障,假设第二台集群宕机了,会导致topic的1/3数据丢失。做不到高可用。

       后来的版本升级中,通过副本,保证了高可用。如下图

                                【RabbitMQ】如何保证消息队列的高可用

      消费者只能从leader里面读数据。此时高可用架构就出来了。假设某一台宕机了,上面的leader就没了。但是此时,别的机器上还有follower。此时kafka会自动感知到leader死了。会将其他的follower给选举出来,作为1个leader。

本文地址:https://blog.csdn.net/qq_26545305/article/details/108197714