RabbitMQ高可用的自我理解

RabbitMQ部署模式

  • 单机模式
  • 普通模式

一条消息只存在于一个实例(A)中,当consumer链接到其他实例(B)时,B会根据元数据(类似注册表)去A中获取消息再发给consumer,这样只提高了吞吐量并没有高可用,而且当流量大时可能造成流量风暴。(所以基本没啥用)

  • 镜像模式

消息和元数据都会同步给其他节点

如何高可用?

发送端

事务模式

  • 事务开启
  • 事务提交
  • 事务回滚

事务模式性能较差,用于多条消息的事务处理(但是一般情况下,消息间应该是无状态的),所以一般不采用这种模式

发布确认模式

ack模式 exchange将消息发到broker后由broker确认,表示已经收到,如果要持久化,那么要等写入磁盘。

消息中间件

毋庸置疑的持久化消息

为什么RabbitMQ的持久化和kafka差很多?

个人理解,kafka使用了linux的特性(零拷贝,顺写,pagecache等),而Rabbit的scale语言使用类似虚拟机屏蔽了操作系统底层,使其可以在多平台上运行势必造成多次内存拷贝等等问题。

接收端

同样是ACK模式,consumer处理完消息后手动ack(手动自动可配)。ack后rabbit才会删除内存(磁盘)中消息。

你可能感兴趣的:(RabbitMQ高可用的自我理解)