消息队列高可用

作者: Tim在路上 | 来源:发表于2019-05-09 21:45 被阅读2次

常见的消息队列有ActiveMQ,RabbitMQ,RocketMQ,kafka,前两个属于集群模式部署来提供高可用,后两个可以部署分布式模式提供HA。

集群模式MQ

集群MQ.png

集群模式下的MQ就是单纯的在每台机器上启动一个MQ,例如RabbitMQ,就是每个机器上启动一个RabbitMQ,只有一台机器上是既有元数据又有实际数据,其他节点上只有元数据。系统可以访问任何节点来拉取数据,如果访问的节点没有实际数据,该节点会先去有实际数据的节点上拉取数据,提高了整个系统的吞吐率。

缺点:1.可能在RabbitMQ集群内部产生大量的数据传输。2.可用性难以保障,如果queue所在的主机挂掉,那么queue数据就会丢失。

镜像集群MQ

镜像MQ.png

镜像集群就是在写MQ的时候给一定数据量的主机写数据或者给所有主机写数据,那么所有的主机都拥有queue的备份,在取数据的时候可以从任何节点进行取数据,即使一个节点挂掉,其他节点任然有备份数据。

缺点:1.性能开销太大,每一个节点包含数据,同写时给所有结点写数据,网络带宽消耗严重。2.没有扩展性,如果某一个queue负载很重,新增的机器也包含了这个queue的所有数据,并没有办法线性扩展你的queue。

分布式MQ

kafka.png

分布式MQ我们以kafka为例,生产者产生数据会被写入到不同的机器,这和镜像模式的RabbitMQ
不同的是RabbitMQ将所有数据写入所有的集群。

kafka的高可用,对写入的机器进行备份,在一个相同副本的主机中分为leader和follower,保证集群的高可用。

如何保证消费系统的幂等性?

MQ都可能出现重复消费的问题,就一个数据,或者一个请求,给你重复来多次,你得确保对应的数据是不会改变的,不能出错。

保证幂等性:

  1. 数据要写库,你先根据主键查一下,如果这数据都有了,你就别插入了,update一下
  2. 写redis,那没问题了,反正每次都是set,天然幂等性
  3. 创建内存set或者redis,每次插入前先去内存set中查一下,需要让生产者发送每条数据的时候,里面加一个全局唯一的id。

相关文章

  • 消息队列高可用

    常见的消息队列有ActiveMQ,RabbitMQ,RocketMQ,kafka,前两个属于集群模式部署来提供高可...

  • 消息队列

    为什么使用消息队列?消息队列有什么优点和缺点? 如何保证消息队列高可用?如何保证消息不被重复消费? kafka,a...

  • 消息队列的高可用

    RabbitMQ 的高可用性 RabbitMQ 是比较有代表性的,因为是基于主从(非分布式)做高可用性的,我们就以...

  • 【MQ消息】

    本文主要介绍MQ高可用性、消息幂等性、消息丢失的问题。 为什么使用消息队列?解耦、异步、削峰 如何保证消息队列的高...

  • Message Queue 消息队列

    消息队列概述 消息队列是系统中重要的中间件,主要解决应用耦合,异步消息,高并发等问题。实现高性能,高可用,可伸缩和...

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

    如何保证消息队列的高可用? RabbitMQ 的高可用性 RabbitMQ 是比较有代表性的,因为是基于主从(非分...

  • mq如何保证高可用,解决重复消费、数据丢失问题和顺序性问题

    一、如何保证消息队列的高可用 1. RabbitMQ的高可用性 rabbitmq有三种模式:单机模式,普通集群模式...

  • 消息队列常见问题

    消息队列缺点 系统可用性降低:加入消息队列,当消息队列出问题,将会导致系统不可用,系统可用性会降低 系统复杂性增加...

  • 消息队列常见问题

    消息队列缺点 系统可用性降低:加入消息队列,当消息队列出问题,将会导致系统不可用,系统可用性会降低 系统复杂性增加...

  • 突破Java面试(06)-如何保证消息队列的高可用性

    0 源码 1 面试题 如何保证消息队列的高可用性 2 考点分析 高可用是必问的,因为MQ的缺点很多,导致系统可用...

网友评论

    本文标题:消息队列高可用

    本文链接:https://www.haomeiwen.com/subject/haoioqtx.html