RocketMQ(1)-RocketMQ特点和基本概念

特点
1 具有灵活的可扩展性.RocketMQ天然支持集群,其核心四大组件(NameServer,Broker,Producer,Consumer)的每一个都可以在没有单点故障的情况下进行水平扩展
2 具有海量消息堆积能力.RocketMQ采用零拷贝原理实现了超大量消息的堆积能力,据说单机已经支持亿级消息堆积,而且在堆积了这么多消息后保持写入低延迟
3 支持顺序消息.RocketMq可以保持消息消费者按照消息的发送顺序对消息进行消费.顺序消息分为全局有序消息和局部有序消息,一般推荐使用局部有序消息,即生产者通过将某一类消息按照顺序发送至同一队列中来实现
4 支持多种消息过滤方式.消息过滤分为在服务器端过滤和在消费端过滤.在服务器端过滤时可以按照消息消费者的要求进行过滤,优点是减少不必要的消息传输,缺点是增加了消息服务器的负担,实现相对复杂.消费端过滤则完全由具体应用自定义实现,这种方式更加灵活,缺点是很多无用的消息会被传输给消息消费者.
5 支持事务消息.RocketMQ除支持普通消息,顺序消息外,还支持事务消息,这个特性对于分布式事务来说提供了另一种解决思路
6 支持回溯消费.回溯消费指的是消费者已经消费成功的消息,由于业务需求需要重新消费.RocketMQ支持按照时间回溯消费,时间维度精确到毫秒,可以向前回溯,也可以向后回溯.

基本概念
1 生产者
生产者(Producer)负责生产消息,生产者向消息服务器发送由业务应用程序系统生成的消息.RocketMQ提供了三种方式发布消息:同步,异步和单向
1)同步发送
同步发送指消息发送方发出消息后,会在收到接收方发回的响应后发送下一个数据包.一般适用于重要通知消息场景,例如重要通知邮件,营销短信等
2)异步发送
异步发送指发送方发出数据后,不等接收方发挥响应,就接着发送下一个数据包.一般适用于可能链路耗时较长而对响应时间敏感的业务场景
3)单向发送
单向发送指只负责发送消息而不等待服务器回应且没有回调函数出发.一般适用于某些耗时非常短但对可靠性要求不高的场景,例如日志收集

2 生产者组
生产者组(Producer Group)是一类生产者的集合,这类生产者通常发送一类消息并且发送逻辑一致,所以将这些生产者分组在一起.从部署结构上看,生产者通过生产者组来标记自己是一个集群

3 消费者
消费者负责发送消息,它消息服务器拉取消息并将其输入用户应用程序中.从用户应用的角度来看,消费者有两种类型:拉取型消费者和推送型消费者
1)拉取型消费者
拉取型消费者(Pull Consumer)主动从消息服务器拉取消息,只要批量拉取到消息,用户应用就会启动消费过程,所以pull被称为主动消费型
2)推送型消费者
推送型消费者(Push Consumer)封装了消息的拉取,消费进度和其他内部维护工作,将消息到达时执行的回调接口留给用户应用程序来实现.所以Push被称为被动消费类型.但从实现上来看,还是从消息服务器拉取消息的.不同于pull的是,Push首先要注册消费监听器,当监听器被触发后才开始消费消息.

4 消费者组
消费者组(Consumer Group)是一类消费者的集合,这类消费者通常消费同一类消息并且消费逻辑一致,所以将这些消费者分组在一起.消费者组与生产者组类似,都是将相同角色的消费者分组在一起并命名的.分组是一个很精妙的概念设计,RocketMQ正是通过这种分组机制,实现了天然的消息负载均衡.在消费消息时,通过消费者组实现了将消息分发到多个消费者服务器实例,比如某个主题有9条消息,其中一个消费组有3个实例,那么每个实例将均摊3条消息,这也意味着我们可以很方便的通过增加机器来实现水平扩展.

5 消息服务器
消息服务器(broker)是消息存储中心,其主要作用是接收来自生产者的消息并进行存储,消费者从这里拉取消息.它还存储与消息相关的元数据,包括用户组,消费进度偏移量,队列信息等.Broker分为Master和Slave两种类型,其中master既可以又可以读,Slave不可以些,只可以读;Borker的集群部署有单Master,多Master,多master多slave(同步双写),多master多slave(异步复制)等多种方式.

1)单Master
一旦Broker重启或者宕机就会导致整个服务不可用

2)多master
所有消息服务器都是master,没有slave.这种方式的优点是配置简单,单个master宕机或者重启对应用无影响;缺点是单台机器宕机期间,该机器上未被消费的消息在机器恢复之前不可订阅,消息的实时性会受到影响.

3)多master多slave(同步双写)
为每个Master都配置一个slave,所以有多对Master-Slave,消息采用同步双写方式,主备都写成功了才返回成功.这种方式的优点是数据和服务都没有单点问题,Master宕机时消息无延迟服务与数据的可用性非常高;缺点是相对异步复制方式其性能略低,发送消息的延迟略高.

4)多master多slave(异步复制)
为每个Master都配置一个slave,消息采用异步复制方式,主被之间有毫秒级消息延迟,这种方式的优点是丢失的消息非常少,且消息的实时性不会受到影响,Master宕机后消费者可以继续从Slave消费,中间的过程对用户应用程序透明,不需要人工干预,性能同多Master方式几乎一样;缺点是Master宕机后在磁盘损坏的情况下会丢失极少量的消息

6 名称服务器
名称服务器(NameServer)用来保存Broker相关元信息并给生产者和消费者查找Broker信息.名称服务器被设计成几乎无状态,可以横向扩展,节点之间无通信,通过部署多台机器来标识自己是一个伪集群.每个Broker在启动时都会到名称服务器注册,生产者在发送消息前会根据主题到名称服务器中获取到Broker的路由信息,消费者也会定时获取主题的路由信息.在功能上看,和Zookeeper差不多

7 消息
消息(message)就是要传输的信息.一条消息必须有一个主题,主题可以被看作是信件要邮寄的地址.一条消息也可以拥有一个可选的标签和额外的键值对,他们被用于设置一个业务key并在Broker上查找此消息,以便定位问题
1)主题
主题(topic)可以被看作是消息的归类,它是消息的第一级类型.一条消息必须有一个主题.一个主题可以有0个,1个,多个生产者向其发送消息,一个生产者也可以同时向不同的主题发送消息,一个主题也可以被0个,1个,多个消费者订阅
2)标签
标签(tag)可以被看作是子主题,它是消息的第二级类型,用于为用户提供额外的灵活性.使用标签,同一业务模块的不同目的的消息就可以用相同的主题不同的标签来标识.标签有助于保持代码干净连贯,并且还可以为RocketMq的查询系统提供帮助
3)队列
主题被划分为一个或多个子主题,即队列(Queue).在一个主题下可以设置多个队列, 在发送消息时执行消息的主题,RocketMq会轮询该主题下的所有队列将消息发送出去.Broker的内部情况如下:
在这里插入图片描述
4)消息消费模式有两种:顺序消费(Orderly)和并行消费(Concurrently).顺序消费表示消息消费的顺序同生产者为每个消息队列发送的顺序一致,如果正在处理的全局顺序是强制性的场景,则要确保所使用的主题只有一个消息队列.并行消费不再保证消息顺序,消费的最大并行数量受每个消费客户端指定的线程池限制.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值