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

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

RabbitMQ的高可用性

rabbitmq有三种模式:单机模式,普通集群模式,镜像集群模式

单机模式就是在本地启动自己玩,是demo级别的,在生产环境不会使用!

普通集群模式:

就是在多台机器上启动多个rabbitmq实例,当创建一个queue的时候,只会放在一个实例上,但是每一个实例都会同步queue的元数据,当进行消费的时候,如果连上了是一个只有元数据的实例,哪么这个rabbitmq就会去这个有queue实例数据的机器上拉取下来进行消费。

这种集群方式的缺点:

1.可能会在这个集群内部产生大量的数据传输,

  1. 可用性没有保障,比如当queue实例所在的节点宕机了,就会导致queue的数据丢失,就没有办法消费

总结:普通集群模式这中方案主要是提高吞吐量的,没有所谓的高可用性可言,就是说让集群中多个节点来服务某个queue的读写操作。

镜像集群模式:

进项集群模式就是每个rabbitmq节点都有queue的镜像,就是每个节点都包含这个queue的完整数据。

任何一个节点宕机了,其他节点行包含了这个queue的完整数,别的consumer都可以到其他节点进行拉取;

但是也有缺点,首先,性能开销也大了,消息同步所有机器,导致网络带宽压力和消耗很重,第二,没有扩展性可言了,如果某个queue负载很重,加机器,新增的机器也包含了这个queue的所有数据,并没有办法线性扩展你的queue。

怎么开启镜像集群模式?

其实很简单rabbitmq有很好的管理控制台,就是在后台新增一个策略,这个策略是镜像集群模式的策略,指定的时候可以要求数据同步到所有节点,也可以要求就同步到指定数量的节点,然后你再次创建queue的时候,应用这个策略,就会自动将数据同步到其他的节点上去了。

 

kafka的高可用性:

kafka是一个纯分布式的架构,

 

 

 

 

posted @ 2020-02-26 21:43  一勺兔子  阅读(158)  评论(0编辑  收藏  举报
Live2D