RocketMQ——初识RocketMQ

你的名字 2021-09-26 22:12 573阅读 0赞

微信公众号“假装正经的程序员”

代码下载地址:https://github.com/apache/rocketmq

各类MQ比对:各类消息队列(MQ)选择对比

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d3ZDExNTQ5NzgzNTI_size_16_color_FFFFFF_t_70

RocketMQ具有以下特点:

  • 是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点。
  • Producer、Consumer、队列都可以分布式。
  • Producer向一些队列轮流发送消息,队列集合称为Topic,Consumer如果做广播消费,则一个consumer实例消费这个Topic对应的所有队列,如果做集群消费,则多个Consumer实例平均消费这个topic对应的队列集合。
  • 能够保证严格的消息顺序
  • 提供丰富的消息拉取模式
  • 高效的订阅者水平扩展能力
  • 实时的消息订阅机制
  • 亿级消息堆积能力
  • 较少的依赖

物理部署结构图:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d3ZDExNTQ5NzgzNTI_size_16_color_FFFFFF_t_70 1

如上图所示, RocketMQ的部署结构有以下特点:

  • Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。
  • Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。每个Broker与Name Server集群中的所有节点建立长连接,定时注册Topic信息到所有Name Server。
  • Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。
  • Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。

消息队列中的主要角色

  • NameServer:单点,供Producer和Consumer获取Broker地址

  • Broker:通俗的讲就是MQ的服务器,消息中转角色,负责存储消息,转发消息。

  • Producer:发送消息到消息队列。
  • Consumer:从消息队列接收消息。
  • Consumer Group:同一个Consumer Group下的各个实例将共同消费topic的消息,起到负载均衡的作用
  • Topic 消息的逻辑管理单位
  • Message Queue:消息物理管理单位,一个Topic将有若干个Queue。
  • Offset:message queue是无限长的数组。一条消息进来下标就会涨1,而这个数组的下标就是offset。

  • max offset:下一条消息的offset

  • min offset:标识现存在的最小offset,消费会被物理地从磁盘删除,message queue的min offset也就对应增长。这意味着比min offset要小的那些消息已经不在broker上了。
  • consumer offset:

  • Message 消息

  • body 消息体,用于携带消息具体内容

  • key 消息的key,用于区别不同的消息一般是业务id,根据key查询到消息
  • tag 消息的Tag,用于不同的订阅者过滤消息

RocketMQ 逻辑部署结构

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d3ZDExNTQ5NzgzNTI_size_16_color_FFFFFF_t_70 2

如上图所示,RocketMQ的逻辑部署结构有Producer和Consumer两个特点。

Producer Group

用来表示一个发送消息应用,一个Producer Group下包含多个Producer实例,可以是多台机器,也可以是一台机器的多个进程,或者一个进程的多个Producer对象。一个Producer Group可以发送多个Topic消息,Producer Group作用如下:

  1. 标识一类Producer
  2. 可以通过运维工具查询这个发送消息应用下有多个Producer实例
  3. 发送分布式事务消息时,如果Producer中途意外宕机,Broker会主动回调Producer Group内的任意一台机器来确认事务状态。

Consumer Group

用来表示一个消费消息应用,一个Consumer Group下包含多个Consumer实例,可以是多台机器,也可以是多个进程,或者是一个进程的多个Consumer对象。一个Consumer Group下的多个Consumer以均摊方式消费消息,如果设置为广播方式,那么这个Consumer Group下的每个实例都消费全量数据。

发表评论

表情:
评论列表 (有 0 条评论,573人围观)

还没有评论,来说两句吧...

相关阅读

    相关 RocketMQ

    产品概述 消息队列(Message Queue,简称 MQ)是阿里巴巴集团中间件技术部自主研发的专业消息中间件。产品基于高可用分布式集群技术,提供消息发布订阅、消息轨