RocketMQ安装
介绍
RocketMQ是一款分布式、队列模型的消息中间件,是由阿里巴巴设计的,具有以下特点:
- 支持严格的消息顺序
- 支持Topic与Queue两种模式
- 亿级消息堆积能力
- 比较友好的分布式特性
- 同时支持Push与Pull方式消费消息
- RocketMQ是纯java编写,基于通信框架Netty
相关术语
Producer
:消息生产者,负责产生消息,一般由业务系统负责产生消息。Producer Group
:一类Producer的集合名称,这类Producer通常发送一类消息,且发送逻辑一致。Consumer
:消息消费者,负责消费消息,一般是后台系统负责异步消费。Push Consumer
:Consumer的一种,应用通常向Consumer对象注册一个Listener接口,一旦收到消息,Consumer对象立 刻回调Listener接口方法。Pull Consumer
:Consumer的一种,应用通常主动调用Consumer的拉消息方法从Broker拉消息,主动权由应用控制。Consumer Group
:一类Consumer的集合名称,这类Consumer通常消费一类消息,且消费逻辑一致。Broker
:消息中转角色,负责存储消息,转发消息,一般也称为Server。Nameserver
:专为RocketMQ设计的轻量级名称服务。集群中Nameserver互相独立,彼此没有通信关系,单台Nameserver挂掉,不影响其他Nameserver,即使全部挂掉,也不影响业务系统使用。而且Nameserver不会有频繁的读写,所以性能开销非常小,稳定性很高。广播消费
:一条消息被多个Consumer消费,即使这些Consumer属于同一个Consumer Group,消息也会被Consumer Group中的每个Consumer都消费一次,广播消费中的Consumer Group概念可以认为在消息划分方面无意义。集群消费
:一个Consumer Group中的Consumer实例平均分摊消费消息。例如某个Topic有9条消息,其中一个Consumer Group有3个实例(可能是3个进程,或者3台机器),那么每个实例只消费其中的3条消息。顺序消息
:消费消息的顺序要同发送消息的顺序一致,在RocketMQ中,主要指的是局部顺序,即一类消息为满足顺序性,必须Producer单线程顺序发送,且发送到同一个队列,这样Consumer就可以按照Producer发送的顺序去消费消息。普通顺序消息
:顺序消息的一种,正常情况下可以保证完全的顺序消息,但是一旦发生通信异常,Broker重启,由于队列总数发生变化,哈希取模后定位的队列会变化,产生短暂的消息顺序不一致。如果业务能容忍在集群异常情况(如某个Broker宕机或者重启)下,消息短暂的乱序,使用普通顺序方式比较合适。严格顺序消息
:顺序消息的一种,无论正常异常情况都能保证顺序,但是牺牲了分布式Failover特性,即Broker集群中只要有一台机器不可用,则整个集群都不可用,服务可用性大大降低。如果服务器部署为同步双写模式,此缺陷可通过备机自动切换为主避免,不过仍然会存在几分钟的服务不可用。Message Queue
:在RocketMQ中,所有消息队列都是持久化,长度无限的数据结构,所谓长度无限是指队列中的每个存储单元都是定长,访问其中的存储单元使用Offset来访问,offset为java long类型,64位,理论上在100年内不会溢出,所以认为是长度无限,另外队列中只保存最近几天的数据,之前的数据会按照过期时间来删除。也可以认为Message Queue是一个长度无限的数组,offset就是下标。异步复制
:消息写入master节点,再由master节点异步复制到slave节点,类似mysql中的master-slave机制。同步双写
:消息同时写入master节点和slave节点。异步刷盘
:Broker的一种持久化策略,消息写入pagecache后,直接返回。由异步线程负责将pagecache写入硬盘。同步刷盘
:Broker的一种持久化策略,消息写入pagecache后,由同步线程将pagecache写入硬盘后,再返回。
集群部署模式
RocketMQ作为消息中间件,其主要功能为消息的Publish/Subscribe。而Broker担任的消息转发和存储功能,其部署方式有很多种:
单Master
优点:除了配置简单没什么优点。
缺点:不可靠,该机器重启或宕机,将导致整个服务不可用。
多Master
优点:配置简单,性能最高。
缺点:可能会有少量消息丢失,单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性。
异步多Master多Slave
每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级。
优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预。
缺点:Master宕机或磁盘损坏时会有少量消息丢失。
同步多Master多Slave
每个Master配一个Slave,有多对Master-Slave,集群采用同步双写方式,主备都写成功,向应用返回成功。
优点:服务可用性与数据可用性非常高。
缺点:性能比异步集群略低,当前版本主宕备不能自动切换为主。
单机安装
jdk1.8安装
下载rocketmq
1 |
|
启动Nameserver
1 |
|
启动Broker
1 |
|
Broker启动内存报错
1 |
|
1 |
|
1 |
|
1 |
|
测试消息发送和接收
1 |
|
关闭服务
1 |
|
常用命令
除了上面几个命令之外,还有如下一些较常用的命令,ip请以实际为准:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!