RocketMQ简单介绍指的是什么

发布时间:2021-10-20 17:59:10 作者:柒染
来源:亿速云 阅读:270

RocketMQ简单介绍指的是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

一、简介

RocketMQ是阿里开源的一款分布式消息中间件,满足线上海量消息堆积的需求, 在2016年底捐赠给Apache开源基金会成为孵化项目,2017年正式成为了Apache顶级项目。是一款纯Java的消息中间件,可靠性、低延迟、可扩展、易于使用的特性而著称。


1、背景介绍

阿里早期也是基于ActiveMQ 5.x的分布式消息中间件来构建其消息中间件,但是随着主题和队列的增加慢慢的发现ActiveMQ IO模块遇到了瓶颈。我们尽力通过节流,断路器或降级解决这个问题,但效果不佳。因此,我们开始关注当时流行的消息传递解决方案Kafka。不幸的是,Kafka无法满足我们的要求,特别是在低延迟和高可靠性方面。Kafka是一个分布式流媒体平台,它源于日志聚合案例。它不需要太高的并发性。在阿里巴巴的一些大型案例中,我们发现原始模型无法满足我们的实际需求。

RocketMQ起源于最开始阿里的Metaq( Metamorphosis) 经历过Metaq 1.x、Metaq 2.x、RocketMQ3.x在其3.0版本的时候更名为RocketMQ,目前最新版本为RocketMQ4.5.x。

2、使用场景

与其说是RocketMQ的使用场景,不如说是MQ(消息队列)的使用场景,MQ的产品比较多目前比较流行的有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等

MQ 可应用在多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即时通信、手游、视频、物联网、车联网等。

下面列举了一些常用的场景:

3、主流MQ比较

主流的MQ的对比RocketMQ 、 ActiveMQ 、 Kafka

消息产品客户端SDK协议和规范消息存储服务器触发重新传递广播消息高可用性和故障转移消息跟踪
ActiveMQJava,.NET,C ++等推模型,支持OpenWire,STOMP,AMQP,MQTT,JMS使用JDBC和高性能日志(如levelDB,kahaDB)支持非常快速的持久性不支持支持支持,根据存储,如果使用kahadb,则需要ZooKeeper服务器不支持
KafkaJava,Scala等拉模型,支持TCP高性能文件存储不支持不支持支持,需要ZooKeeper服务器不支持
RocketMQJava,C ++,Go拉模型,支持TCP,JMS,OpenMessaging高性能和低延迟的文件存储支持支持支持的Master-Slave模型,没有其他套件支持

二、概况

1、RocketMQ集群部署结构

RocketMQ简单介绍指的是什么

Name Server

Name Server是一个几乎无状态节点,可集群部署,节点之间无任何信息同步。

Broker

Broker部署相对复杂,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的Broker Name,不同的Broker Id来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。

每个Broker与Name Server集群中的所有节点建立长连接,定时(每隔30s)注册Topic信息到所有Name Server。Name Server定时(每隔10s)扫描所有存活broker的连接,如果Name Server超过2分钟没有收到心跳,则Name Server断开与Broker的连接。

Producer

Producer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。Producer完全无状态,可集群部署。

Producer每隔30s(由ClientConfig的pollNameServerInterval)从Name server获取所有topic队列的最新情况,这意味着如果Broker不可用,Producer最多30s能够感知,在此期间内发往Broker的所有消息都会失败。

Producer每隔30s(由ClientConfig中heartbeatBrokerInterval决定)向所有关联的broker发送心跳,Broker每隔10s中扫描所有存活的连接,如果Broker在2分钟内没有收到心跳数据,则关闭与Producer的连接。

Consumer

Consumer与Name Server集群中的其中一个节点(随机选择)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。Consumer既可以从Master订阅消息,也可以从Slave订阅消息,订阅规则由Broker配置决定。

Consumer每隔30s从Name server获取topic的最新队列情况,这意味着Broker不可用时,Consumer最多最需要30s才能感知。

Consumer每隔30s(由ClientConfig中heartbeatBrokerInterval决定)向所有关联的broker发送心跳,Broker每隔10s扫描所有存活的连接,若某个连接2分钟内没有发送心跳数据,则关闭连接;并向该Consumer Group的所有Consumer发出通知,Group内的Consumer重新分配队列,然后继续消费。

当Consumer得到master宕机通知后,转向slave消费,slave不能保证master的消息100%都同步过来了,因此会有少量的消息丢失。但是一旦master恢复,未同步过去的消息会被最终消费掉。

2、消息发送类型

1)同步消息(可靠)

同步发送,线程阻塞,投递completes阻塞结束

如果发送失败,会在默认的超时时间3秒内进行重试,最多重试2次

投递completes不代表投递成功,要check SendResult.sendStatus来判断是否投递成功

2)异步消息(可靠)

发送异步消息需要指定消息发送成功后的回调函数,调用发送消息的API会立刻返回,消息发送者的线程不阻 塞,直到运行结束,消息发送成功或者失败的回调任务在新的线程中执行。

3)单向消息(不可靠)

消息不可靠,性能高,只负责往服务器发送一条消息,不会重试也不关心是否发送成功

此方式发送消息的过程耗时非常短,一般在微秒级别

3、消费模式(集群/广播)

RocketMQ物理部署图:

RocketMQ简单介绍指的是什么

术语解释

消息主题(Topic)

Topic是生产者在发送消息和消费者在拉取消息的类别。Topic与生产者和消费者之间的关系非常松散。具体来说,一个Topic可能有0个,一个或多个生产者向它发送消息;相反,一个生产者可以发送不同类型Topic的消息。类似的,消费者组可以订阅一个或多个主题,只要该组的实例保持其订阅一致即可。

一个主题对应多个队列(默认4个)

消息是存储在不同的队列中

消费组(ConsumerGroup)

一类 Consumer 的集合名称,组内的 Consumer 通常消费一类消息,消费消息逻辑一致。

一个consumerGroup只对应一个topic

同一个ConsumerGroup中的消费者订阅的主题(Topic)和标签(Tag)必须一致(集群模式下消费会有问题)

一个消息队列只会对应一个消费者

生产组(ProducerGroup)

一类 Producer 的集合名称,组内的 Producer 通常发送一类消息,发送消息逻辑一致

1)广播模式

一条消息被多个consumer消费,即使这些consumer属于同一个ConsumerGroup,消息也会被ConsumerGroup中的每个Consumer都消费一次,广播消费中ConsumerGroup概念可以认为在消息划分方面无意义。

2)集群模式(默认)

一个ConsumerGroup中的Consumer实例平均分摊消费消息。例如某个Topic有9条消息,其中一个ConsumerGroup有3个实例(可能是3个进程,或者3台机器),那么每个实例只消费其中部分,消费完的消息不能被其他实例消费。

看完上述内容,你们掌握RocketMQ简单介绍指的是什么的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. 4:GTID简单介绍
  2. oracle lob 简单介绍

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

rocketmq

上一篇:RocketMQ如何快速入门

下一篇:RocketMQ存储文件是怎样的

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》