【RocketMq系列】(1) - 基础入门

100 阅读2分钟

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情

简介

RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件,前身是MetaQ,是阿里参考Kafka特点研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。

image.png

Rocketmq集群

  • rocketmq集群化部署承载高并发访问
  • rocketmq存储海量消息,实现分布式架构

MQ如何集群化部署来支撑高并发访问?

rocketmq单机部署,即使机器配置很高一般也就是支持10万+的并发访问量。假设有大量的系统往rocketmq高并发的写入消息,每秒有几十万的并发访问,通过集群化部署可把几十万请求分散到多台机器,让每台机器承受的QPS小于10万。

MQ如果要存储海量消息应该怎么做?

mq从系统中接收到海量的消息,这些消息并不会立刻被消费者获取消费,一般mq会把消息存储到本地磁盘中等待消费者获取消息处理,因此mq会存储大量的消息,可能上亿条,这些消息在一台机器上肯定存储不下。如果部署集群的话,mq把收到的消息分散发送给多台不同的机器,多台机器加起来就可以存储海量消息。

image.png

高可用保障:万一Broker宕机了怎么办?

机器上部署的rocketmq进程一般称为broker,每个broker会收到不同的消息。rocketmq通过Broker主从架构以及多副本策略,Broker有master和slave两种角色,master broker收到的消息会同步给slave broker,这样一条消息在集群中有两份副本,这个时候如果任何一个master broker出现故障,还有一个slave broker上有一份数据副本,可以保证数据不丢失,还能继续对外提供服务,保证了MQ的可靠性和高可用性。

image.png

数据路由:怎么知道访问哪个Broker?

rocketmq有一个NameServer的概念,NameServer独立部署在几台机器中,Broker会把自己的注册到NameServer中,如果生产者消费者要收发消息到Broker中,会找NameServer获取对应的Broker路由信息。

image.png