基本介绍

rocketmq是阿里巴巴团队使用java语言开发的一款基于发布订阅模型的分布式消息队列中间件,是一款低延迟,高可用,拥有海量消息堆积能力和灵活拓展性的消息队列。

特点

  • 可以实现集群无单点故障问题,节点高可用,水平可扩展;
  • 支持消息存储,写入低延迟,支持实时消息查询;
  • 支持上万个消息队列,性能高;
  • 提供消息失败重试机制,可靠性高;
  • 开源社区活跃性高,经受过阿里双十一考验,具备较高成熟度。

基本组件

下图是rocketmq的物理部署架构:

从上图可以知道,rocketmq由四大核心模块组成:producer、consumer、brokerServer、nameServer。其中brokerServer和nameServer是rocketmq的服务端,两者一起独立的对外提供服务;而producer和consumer可看做是rocketmq的客户端,一般依附于业务应用程序。下面对这四个组件进行分别介绍:

  • NameSever

    NameServer,一般称为名称服务器,是rocketmq中一个非常重要的组件,主要提供轻量级服务发现和路由功能,功能说明如下:

    1.broker管理:NameServer负责接收Broker集群各个节点的注册信息,并定时提供心跳来检测集群中的Broker是否可用;

    2.路由管理:NameServer 还负责保存和维护broker集群的路由元信息,broker的每次上下线都和nameServer通信,由nameServer来维护broker的路由信息,而producer和consumer通过访问nameServer获得对应broker的访问地址后,再向对应的broker发起请求。nameServer解除了broker和客户端的耦合依赖关系,大大提高了效率。
  • BrokerServer

    BrokerServer主要负责rocketmq中消息的接收,存储和转发,支持消息的push和pull模式,提供了极高的峰值处理能力和按照时间顺序存储数以百万记的消息存储能力,此外,它提供了灾难恢复、丰富的度量统计和警报机制,因此成为rocketmq中最核心的组件。
  • Producer

    Producer,顾名思义就是生产者,在Rocketmq中主要用来产生并发送消息,生产端可以使用producer来发送多种形式的消息到brokerServer, 然后由brokerServer统一进行分发。rocketmq的producer支持多种形式的消息发送,如同步消息发送、异步回调消息发送、顺序消息发送以及单向消息发送(异步无回调)。除了单向消息发送,其余的发送方式均需要brokerServer返回发送结果的确认消息。另外,相比其他MQ中间件,rocketmq的一个重要功能是支持发发送事务消息(半消息),该机制能一定程度上解决分布式事务的问题。
  • Consumer

      Consumer是消费者组件,负责消费producer发送的消息,它会从brokerServer获取消息并发送给应用程序,应用程序可以根据需要进行消费。Consumer支持两种消费模式,一种是推模式,这种模式下消息是由brokerServer主动推送给Consumer的,而拉模式则是Consumer定期去brokerServer拉取消息。

      rocketmq使用的消费原语是At least Once, 即至少一次消费成功。如果一定时间内没有接收到consumer消息确认消费的响应结果,会将同一条消息再次投递给consumer。rocketmq采用ack机制保证消息的消费成功,所以consumer可能会多次收到同一条消息,需要consumer的业务方做好幂等防护。

基本概念

除了上述说明的基本组件,rocketmq中还有一些基本概念需要进行说明,掌握这些概念之后用户可以更好地理解rocketmq的设计理念。

  • Topic

    Topic即主题,在rocketmq中代表一系列消息的集合,属于一级消息类型,通常用于对消息进行初步分类。任何消息只能属于一个topic主题,主题是rocketmq进行消息发布订阅的最小单位。业务方可以通过创建并订阅各式各样的主题来满足自身的业务要求。不同主题之间的消息在逻辑上没有关联。
  • Tag

    Tag即标签,从属于Topic,用于在同一主题内部对消息进行进一步区分,标签可以简单的认为是二级主题,通过tag标签功能,业务方可以方便的实现对各种二级主题的消费需求,从而实现对消息的精确分类和消费。
  • group

    group,顾名思义就是组的意思,在rocketmq中代表着同一类客户端的集合。具体可分为消费者组(consumer group)和生产者组(producer group)两种。消费者组和生产者组之间没有任何关联(即使组名一样)。

    1.消费者组:

    消费者组代表着同一类型的消费者集群。同一消费者组内的消费者通常消费同样的消息且消息消费逻辑一致。消费者组的概念使得consumer集群在消费消息时,rocketmq可以通过负载均衡来做到消费消息时的高可用和容错。

    2.生产者组:

    类似地,生产者组代表同一类型的生产者集合,在rocketmq中生产者组可以实现事务消息的高可用性。
  • message

    message是rocketmq中消息传递的主体,每一条消息具有全局唯一的message ID, 用户可以根据message ID查询进行消息的精确查询。另外,message的内容可以是不超过rocketmq限制的任意二进制数据,rocketmq不会对消息承载的数据内容做任何干预。
  • 集群模式

    集群模式:对于任意一条被订阅的消息,同一消费者组下的节点只有一个节点对其进行消费;一个消费者组中的全部节点分摊所有消息。

    消费示例图如下所示:

  • 广播模式

    广播模式:对于任意一条被订阅的消息,同一消费者组下的所有节点都会对其进行消费;一个消费者组中的全部节点都能接收到全量的消息。

    消费示例图如下所示:

参考资料

https://www.cnblogs.com/ldy-blogs/p/10452422.html

https://blog.csdn.net/qq_37939251/article/details/84026365

https://www.cnblogs.com/xiaoxiongcanguan/p/11510366.html

【rocketmq学习笔记】rocketmq入门学习的更多相关文章

  1. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  2. WebSocket学习笔记——无痛入门

    WebSocket学习笔记——无痛入门 标签: websocket 2014-04-09 22:05 4987人阅读 评论(1) 收藏 举报  分类: 物联网学习笔记(37)  版权声明:本文为博主原 ...

  3. Java学习笔记之---入门

    Java学习笔记之---入门 一. 为什么要在众多的编程语言中选择Java? java是一种纯面向对象的编程语言 java学习起来比较简单,适合初学者使用 java可以跨平台,即在Windows操作系 ...

  4. DBFlow框架的学习笔记之入门

    什么是DBFlow? dbflow是一款android高性的ORM数据库.可以使用在进行项目中有关数据库的操作.github下载源码 1.环境配置 先导入 apt plugin库到你的classpat ...

  5. MongoDB学习笔记:快速入门

    MongoDB学习笔记:快速入门   一.MongoDB 简介 MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统.在高负载的情况下,添加更多的节点,可以保证服务器性能.M ...

  6. HTML+CSS学习笔记 (6) - 开始学习CSS

    HTML+CSS学习笔记 (6) - 开始学习CSS 认识CSS样式 CSS全称为"层叠样式表 (Cascading Style Sheets)",它主要是用于定义HTML内容在浏 ...

  7. 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧

    目录 学习笔记:CentOS7学习之二十五:shell中色彩处理和awk使用技巧 25.1 Shell中的色彩处理 25.2 awk基本应用 25.2.1 概念 25.2.2实例演示 25.3 awk ...

  8. 学习笔记:CentOS7学习之二十四:expect-正则表达式-sed-cut的使用

    目录 学习笔记:CentOS7学习之二十四:expect-正则表达式-sed-cut的使用 24.1 expect实现无交互登录 24.1.1 安装和使用expect 24.2 正则表达式的使用 24 ...

  9. 学习笔记:CentOS7学习之二十三: 跳出循环-shift参数左移-函数的使用

    目录 学习笔记:CentOS7学习之二十三: 跳出循环-shift参数左移-函数的使用 23.1 跳出循环 23.1.1 break和continue 23.2 Shift参数左移指令 23.3 函数 ...

  10. 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环

    目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...

随机推荐

  1. expect的使用

    1. expect概述 1.1 expect的功能 脚本执行时,有时会需要人工进行交互输入,这时可以通过expect工具来实现自动交互. expect是一种shell解释器,但是expect可以在命令 ...

  2. 【1w字+干货】第一篇,基础:让你的 Redis 不再只是安装吃灰到卸载(Linux环境)

    Redis 基础以及进阶的两篇已经全部更新好了,为了字数限制以及阅读方便,分成两篇发布. 本篇主要内容为:NoSQL 引入 Redis ,以及在 Linux7 环境下的安装,配置,以及总结了非常详细的 ...

  3. 406 UDP协议是面向非连接的协议 Keep-Alive

    HTTP The Definitive Guide   Table 3-1. Common HTTP methods   Method Description Message body?   GET ...

  4. Java NIO ———— Buffer 缓冲区详解 入门

    引言缓冲区是一个用于特定基本类型的容器.由java.nio 包定义,所有缓冲区都是 Buffer 抽象类的子类. Java NIO 中的 Buffer ,主要用于与NIO 通道进行交互.数据从通道存入 ...

  5. 丢包 ICMP

    小结: 1.ICMP 常见网络丢包故障分析及处理 云极安 云极安 2019-12-25 我们在管理维护网络的过程中经常会遇到数据包丢失的现象.使用Ping命令进行连通性测试,则会发现Ping包延时远远 ...

  6. python中贪婪与非贪婪

    Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符: 非贪婪则相反,总是尝试匹配尽可能少的字符. 在"*","?", ...

  7. Pod和容器的LimitRange原理和实践总结

    一.背景介绍 通常情况下,Pod中的容器可以无限制的使用节点上的CPU和内存资源,在共享资源和资源有限的情况下,若不加以限制,某个集群或命名空间的资源可能会消耗殆尽,导致其他节点上优先级低的Pod发生 ...

  8. 【转】DDD-应用架构

    简介: 应用架构,指软件系统中固定不变的代码结构.设计模式.规范和组件间的通信方式.在应用开发中架构之所以是最重要的第一步,因为一个好的架构能让系统安全.稳定.快速迭代.但是今天我们在做业务研发时,更 ...

  9. 洛谷P4127

    Description 给出两个数 \(a\),\(b\) ,求出 \([a,b]\) 中各位数字之和能整除原数的数的个数 Solution 设 \(f[i][j][k][q]\) 表示 枚举到第 i ...

  10. Python 中 sorted 如何自定义比较逻辑

    在 Python 中对一个可迭代对象进行排序是很常见的一个操作,一般会用到 sorted() 函数 num_list = [4, 2, 8, -9, 1, -3] sorted_num_list = ...