专栏首页漫漫架构路RocketMQ详解(2)——RocketMQ核心概念

RocketMQ详解(2)——RocketMQ核心概念

RocketMQ详解(2)——RocketMQ核心概念

一. RocketMQ专业术语

  1. Producer 消息生产者,负责产生消息,一般由业务系统负责产生消息。
  2. Consumer 消息消费者,负责消费消息,一般由后台系统负责异步消费。
  3. Push Consumer Consumer的一种,通常是应用向Consumer注册一个Listener接口,一旦Consumer收到消息,立刻回调Listener接口的方法。
  4. Pull Consumer Consumer的一种,通常由应用主动调用Consumer的拉取消息方法吃Broker拉消息,主动权由应用控制。
  5. Producer Group 一类Producer的集合,同一个Group内的Producer发送同一类消息,且发送逻辑一致。
  6. Consumer Group 一类Consumer的集合,同一个Group内的Consumer消费同一类消息,且消费逻辑一致。
  7. Broker 消息中转角色,负责存储、转发消息,一般也成为Server,在JMS规范中成为Provider。

二. RocketMQ的消费方式

  1. 广播消息 一条消息被多个Consumer消费,即使这些Consumer属于同一个Consumer Group,消息也会被Consumer Group中的每一个Consumer都消费一次。可以认为,在广播消费情况下,Consumer Group的划分无意义。在CORBA Notification规范中,消费方式都属于广播消费。在JMS规范中,相当于Pub/Sub模型。
  2. 集群消费 一个Consumer Group中的所有Consumer平均分摊消费消息(组内负载均衡),例如某个Topic有9条消息,发往一个Consumer Group,该Consumer Group有3个实例(可能是3个进程,或3台机器),那么每个实例只消费其中的3条消息。CORBA Notification规范中没有此消费方式。在JMS规范中,类似于P2P模型,但是RocketMQ的集群消费功能大于等于JMS的P2P消费。因为集群消费模式下,RocketMQ单个Consumer Group内的消费类似于P2P,但是一个Topic/Queue可以被多个Consumer Group消费。
  3. 顺序消费 消息消费的顺序要和发送的顺序保持一致。在RocketMQ中,该顺序主要指局部顺序,即一类消费为满足顺序性,必须Producer单线程发送,且发送到同一个队列,这样Consumer就可以按照Producer的发送顺序来消费消息。
  4. 普通顺序消费 顺序消费的一种,无论正常、异常情况下,都能保证消息的顺序。但是一旦宕机,Broker重启,由于队列总数发生变化,哈希取模后定位的队列会变化,导致短暂的消息顺序不一致。如果业务能够容忍在集群异常情况下(如某个Broker宕机或重启)消息出现短暂的乱序,那么使用普通顺序消费比较合适。
  5. 严格顺序消息 顺序消费的一种,无论正常、异常情况下,都能保证消息的顺序,但是牺牲了分布式的Failover特性,即Broker集群中只要有一个节点不可用,则整个集群都不可用,这大大降低了服务的可用性。如果服务器部署为同步双写模式,此缺陷可通过slave自动切换成master避免,不过仍然可能存在几分钟的服务不可用。目前已知的应用只要数据库的binlog同步强依赖严格顺序消息,其他应用大部分都可以容忍短暂乱序,推荐使用普通顺序消费模式。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • RocketMQ详解(3)——RocketMQ集群模型与搭建

    RocketMQ天然支持分布式集群模型,其中主节点可读可写,从节点只可读,不可写,类似MySQL的主从模式。RocketMQ主要支持以下几种集群模型:

    张申傲
  • Spring源码学习笔记(13)——JDBC

    Spring提供了JdbcTemplate模板类来操作数据库,JdbcTemplate是对原生JDBC进行了全面的封装,统一处理了数据库连接的获取与释放等操作,...

    张申傲
  • Spring源码学习笔记(4)——注解扫描

    有了@Filter注解和FilterType过滤类型,我们就可以指定自己的注解扫描过滤规则。

    张申傲
  • 如何成为有创意的设计师,而不是艺术家?

    看看Dribbble或Behance上的首页推荐,你就会发现各种色彩鲜艳、与众不同、布局精美的作品。尽管这些网站的商业定位是招聘设计师的地方,但现在太多太多的设...

    宇相
  • 『互联网架构』软件架构-rocketmq之实践(62)

    参数名默认值描述:------::--------::-------:namesrvAddr Name Server地址列表,多个NameServer...

    IT故事会
  • UVA11988:悲剧文本(模拟链表)

    You’re typing a long text with a broken keyboard. Well it’s not so badly broken....

    ACM算法日常
  • BAT 互联网大厂如何做软件测试和质量保障? | MTSC2019

    2019 软件测试行业最热的技术和质量管理最佳实践,尽在 MTSC2019 大会!

    华章科技
  • 先行者~问答栏目,今晚面向先行者计划成员开放

    【知识星球】,是一个微信小程序,可以不用安装其它app,直接在微信里登录、查看。我在里面创建了几个栏目,其中的“先行者~问答”栏目,今晚开放。

    web前端教室
  • Leetcode-Medium 621. Task Scheduler

    给定一个char数组表示CPU需要执行的任务。它包含大写字母A到Z,其中不同的字母代表不同的任务。每项任务都可以在一个时间间隔内完成。对于每个间隔,CPU可以完...

    致Great
  • 微软开源无人机训练模拟器AirSim,训练省钱啦

    量子位 李林 | 编译自TechCrunch 微软今天开源了测试版的模拟器AirSim,可以用来训练自动无人机和其它自主移动设备。 视频内容 就是视频里展示的...

    量子位

扫码关注云+社区

领取腾讯云代金券