分布式MQ和非分布式MQ高可用的实现机制

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副本,从而实现高可用机制
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容