1.RabbitMQ的高可用
- 镜像集群模式
- 场景:假如rabbitmq集群,有A、B、C三台机器,这三台机器都会有queue的元数据,但是只有一台机器有queue元数据+实际数据(假设A机器上),那么消费者去MQ集群消费消息,如果访问的是B、C两台机器,则B、C又会去访问A机器拿取实际数据.
- 解决方案:使用镜像集群模式,假如rabbitmq集群,有A、B、C三台机器,这三台机器都会有queue的全部数据,无论消费者去哪个节点消费数据,都能获取到.
- 缺点:rabbitmq不是分布式的,如果queue的数据量很大,超过了机器的容量也是个问题
- 如何开启镜像模式:登入rabbitmq的控制台,新增镜像集群策略,指定数据同步到所有节点.然后创建queue的时候使用这个策略即可
2.kafka的高可用
- 场景:
- Kafka创建一个topic指定partition数为三个,每个partition对应一个broker进程(一台机器),现在生产者往topic写入三条数据,每个partition分配一条数据,如果其中的一个broker挂了,那么写入的数据将会丢失1/3
- 高可用解决方案:
- 为每个partition创建leader和follower副本(保证每个leader副本至少有一个follower副本),此时每个partition都会有多个副本(例如:partition1有副本1,副本2,副本3),指定其中一个副本为leader副本,Kafka的读写只会通过leader副本,每当leader副本读写数据时都会把数据同步到其它follower副本,一但leader副本挂了,Kafka会从follower副本中选举出一个成为leader副本,从而实现高可用机制