前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >消息队列高可用

消息队列高可用

作者头像
Tim在路上
发布2020-08-04 21:24:36
3970
发布2020-08-04 21:24:36
举报
文章被收录于专栏:后台技术底层理解

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

集群模式MQ

集群MQ.png
集群MQ.png

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

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

镜像集群MQ

镜像MQ.png
镜像MQ.png

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

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

分布式MQ

kafka.png
kafka.png

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

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

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

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

保证幂等性:

  1. 数据要写库,你先根据主键查一下,如果这数据都有了,你就别插入了,update一下
  2. 写redis,那没问题了,反正每次都是set,天然幂等性
  3. 创建内存set或者redis,每次插入前先去内存set中查一下,需要让生产者发送每条数据的时候,里面加一个全局唯一的id。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 集群模式MQ
  • 镜像集群MQ
  • 分布式MQ
  • 如何保证消费系统的幂等性?
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档