栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

初始RocketMQ

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

初始RocketMQ

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录
  • 消息队列的作用
  • 基本概念


消息队列的作用
  1. 应用解耦

AB应用不在互相依赖; 传统项目中A,B应用的消息发送是直连的,并且如果网络数据传递过程中有问题,可能导致某一方数据迟迟获取不到;并且可能存在单点故障问题,此时就需要人工或其他工具进行监控;而使用消息队列后会将消息先存储在中间件中,等合适的时机在进行消费,避免了强耦合。

  1. 流量削峰

流量达到高峰的时候,通常使用限流算法来控制流量涌入系统,避免系统被击瘫,但是这种方式损失了一部分请求

此时可以使用消息中间件来缓冲大量的请求,匀速消费,当消息队列中堆积消息过多时,我们可以动态上线增加消费端,来保证不丢失重要请求。

  1. 大数据处理

消息中间件可以把各个模块中产生的管理员操作日志、用户行为、系统状态等数据文件作为消息收集到主题中

数据使用方可以订阅自己感兴趣的数据内容互不影响,进行消费

  1. 异构系统

跨语言

基本概念

RocketMQ中主要包括消费者,生产者,Broker,Topic;
生产者:产生数据,可以同时存在多个生产者同时发送数据;生产者生产的数据会属于一种topic(场景/主题,一种逻辑概念)
消费者:消费数据,存在消费组的概念,每一个组中可能存在多个消费者,消费者可以从多个队列中进行消费,但是每条消息只能被同一个消费者消费一次(集群消费情况下)
Broker:一般为一个物理节点,也可以理解成是一个服务;每种topic的数据可以跨越多个broker,同时每个broker也可以存储多种topic的数据;节点启动的时候会扫描NameServer,然后注册自己的信息然后定时上报。
Queue:实际存储数据的区域,每种topic中会存在多个queue,并且可以不均匀的分布在不同的broker中
NameServer: 可以类比Zookeeper,起到分布式协调的作用,充当路由的作用,会记录broker的元数据,并为producer/consumer暴露服务,告诉数据属于哪个broker-》queue当中。可以存在多个NameServer做集群。
RocketMQ的消息模型:

topic可以理解成一个大主题,还可以对其中的数据继续划分为不同的tag,可以将整个数据集粒度更细化,方便做索引提高查询效率。

RoketMQ中的两种获取数据方式:

  1. pull(拉取): 应用通常主动调用Consumer的拉消息方法从Broker服务器拉消息、主动权由应用控制。一旦获取了批量消息,应用就会启动消费过程。
  2. push(推送):该模式下Broker收到数据后会主动推送给消费端,该消费模式一般实时性较高。但是对于producer/consumer能力不同的时候,生产/消费能力可能不成正比,导致数据的丢失。

Consumer的消费方式:

  1. 集群消费:集群消费模式下,相同Consumer Group的每个Consumer实例平均分摊消息。当queue:consumer的时候1:1平摊;如果1:N 轮询。
  2. 广播消费:每次消息的发送,相同Consumer Group的每个Consumer实例都接收全量的消息。

消息的消费顺序:

  1. 顺序消费:也可以理解是局部有序,消费者通过同一个消息队列( Topic 分区,称作 Message Queue) 收到的消息是有顺序的,不同消息队列收到的消息则可能是无顺序的。

当consumer拉取数据的时候,可能先获取a组或b组,宏观看可能产生 a1 b1 a2 a3 b2…,但是从不同的主题消息看,是局部有序的

  1. 严格顺序:不存在参杂的情况。可以得到:必须只有一个生产者,一个broker;因为一旦存在多个生产者,总会存在网络上的问题导致进入broker的顺序可能发生改变;而如果在生产数据的时候引入分布式事务,锁等其他技术也会导致整体的性能下降,所以需要更具不同的情况考虑。

所有消息按照严格的先入先出(FIFO)的顺序进行发布和消费。 适用场景:性能要求不高,所有的消息严格按照 FIFO 原则进行消息发布和消费的场景

RocketMQ的可靠性: (来自官方文档)
RocketMQ支持消息的高可靠,影响消息可靠性的几种情况:

  1. Broker非正常关闭
  2. Broker异常Crash
  3. OS Crash
  4. 机器掉电,但是能立即恢复供电情况
  5. 机器无法开机(可能是cpu、主板、内存等关键设备损坏)
  6. 磁盘设备损坏
    1)、2)、3)、4) 四种情况都属于硬件资源可立即恢复情况,RocketMQ在这四种情况下能保证消息不丢,或者丢失少量数据(依赖刷盘方式是同步还是异步)。

5)、6)属于单点故障,且无法恢复,一旦发生,在此单点上的消息全部丢失。RocketMQ在这两种情况下,通过异步复制,可保证99%的消息不丢,但是仍然会有极少量的消息可能丢失。通过同步双写技术可以完全避免单点,同步双写势必会影响性能,适合对消息可靠性要求极高的场合,例如与Money相关的应用。注:RocketMQ从3.0版本开始支持同步双写。

Rocket中的broker具有集群-主从模式,对于每个主节点的broker,会将自己的消息同步到备机中;每个生产者只能向主机中写入数据,而消费者可以从主/备获取数据。


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/970509.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号