1.如何保证消息队列的高可用?
一、rabbitmq的高可用
a.单机模式
b.普通集群模式(无高可用性)
【连接获取数据方式】创建的queue只会放到一个mq上,消费的时候如果连接的另一个实例。那么需要去存放数据的queue拉取数据。
【设置连接方式】
1)随机 的获取实例连接所有的queue。缺点:有拉取数据的性能问题
2)指定到有queue的mq上。缺点:单实例的性能瓶颈
【事故处理方式】存放了queue的实例宕机了,未开启持久化的话,其它实例会拉取不到数据。开启了持久化的话,需要服务器恢复了才能继续使用。
c.镜像集群模式
【存储数据的方式】创建的queue和queue里的消息都会存在于多个实例上,每次写消息都会自动把消息到多个实例queue进行消息同步。
缺点:1.同步数据导致网络带宽压力和消耗很重。2.没有扩展性,新增的机器也包含了这个queue的全部数据。
优点:一个机器坏了,其余机器可以顶上。
二、kafka的高可用性
【存放原理】每台服务器上会创建一个broker进程,每台机器+机器上的broker进程,就可以认为是kafka集群中的一个节点。创建一个topic可以指定三个partition。例如写三条数据可能会放到三个partition里面。
【高可用机制】kafka 0.8以后是有高可用机制,副本机制,每个partition都会有一个副本。主的是leader,副本是follower,写和读数据都是从leader中。leader写入的时候会将数据同步到follower上。

本文探讨了消息队列如rabbitmq和kafka的高可用性实现,包括镜像集群和副本机制。同时,针对消息重复消费、丢失和顺序性问题,提出了幂等性设计、确认机制和分区策略。对于延时及过期失效,提出了应急处理方案,如新建topic、增加消费者和临时快速消费策略。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



