[高级消息队列] 消息队列高可靠性和集群模式

消息队列的高可靠性来自其处理消息的速度和响应速度。

1.RabbitMQ

RabbitMQ是主从模式,有单机模式、普通集群模式、镜像集群模式。

普通集群模式

消息队列的queue数据保存在集群中的某一个节点上,所有节点均拥有全部元数据。

若消费者从其他节点获取数据,则由该节点从queue所在的节点拉取消息数据返回给消费者。

消费者可以固定只访问queue所在的节点,也可以随机访问一个可用节点。

优点:

可以提高响应和查询速度(提高吞吐能力)。

缺点:

依然有数据拉取开销,这会导致单实例性能瓶颈。若主节点宕机,则可能导致消息丢失。

镜像集群模式

每个节点都是主节点的完整镜像,保存并同步消息队列的元数据和消息数据。

优点:

提高可用性,并且若部分节点宕机依然可以恢复。

缺点:

额外开销极大,若需要新增加节点会较为困难。

2.Kafka的高可用性

Kafka是分布式架构,由多个broker组成,创建的topic会被划分为多个partition,每个partition可以存放在不同broker上,每个partition存放一部分数据。

HA机制,即将每个parition数据同步到其他机器上形成多个replica(复制品)副本机制,这些replica会经过选举产生leader,leder负责将数据同步到其他follower节点。kafka将一个partition的所有replica分布到不同机器上以提高容错性。

offset机制,Kafka中每个消息有一个offset(代表消息的唯一序号)。当关闭offset自动提交后,消费者需要自行提交已消费消息的offset。

注意:一般来说数据读写依然是向leader操作,否则需要考虑一致性问题。

posted @ 2021-10-26 23:11  Cheung-10  阅读(3)  评论(0)    收藏  举报