RocketMQ实战

消息队列基本概念

简单来说,消息队列你就可以理解为Java中队列,只不过在高并发,大数据量场景下,我们要消除单点故障,保证消息传输的可靠性,并且需要应对大流量的冲击,所以就有了消息队列这个概念

java队列完成生产者消费者模型

生产者生产,往队列里面投放,消费者进行消费
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
使用Queue队列实现生产者消费者模型好处:
1.解耦和提高系统的灵活性:生产者和消费者之间通过队列进行解耦,生产者可以独立地生成数据,而消费者可以独立地消费数据。这样的设计使得系统更加灵活,可以根据需求调整生产者和消费者的数量和速度,而不会对彼此产生太大的影响
⒉并发处理和资源管理:生产者消费者模型可以支持并发处理,多个生产者和消费者线程可以同时操作队列。这样可以充分利用多核处理器的优势,提高系统的吞吐呈和性能。同时,通过合理管理队列的容呈,可以避免生产者和消费者之间的资源竞争问题,提高系统的稳定性。
3.缓冲和异步处理:队列作为中间缓冲区,可以帮助平衡生产者和消费者之间的速度差异。当生产者速度快于消费者时,数据可以先暂存在队列中,消费者再按需取出处理,避免数据丢失。同时,生产者和消费者可以异步地进行处理,不需要实时等待对方的完成,提高了系统的响应性能。
4.提高系统可靠性:生产者消费者模型可以帮助处理异常情况和故障恢复。当消费者无法及时处理数据时,可以通过合理设置队列的容呈来缓冲数据,避免数据丢失。当消费者出现故障时,生产者可以继续产生数据,等待消费者恢复后再继续消费,提高了系统的可靠性和容错性。

使用消息队列也包含了这些优点,相比对使用Java队列完成生产者消费者模型,消息队列还可以做到:
1.应用解耦∶复杂的应用里会存在多个子系统,比如在电商应用中有订单系统、库存系统、物流系统、支付系统等。这个时候如果各个子系统之间的耦合性太高,整体系统的可用性就会大幅降低。多个低错误率的子系统强耦合在一起,得到的是一个高错误率的整体系统。
⒉流量消峰:每年的双十一,淘宝的很多活动都在0点的时候开启,大部分应用系统流量会在瞬间猛增,这个时候如果没有缓冲机制,不可能承受住短时大流量的冲击。通过利用消息队列,把大量的请求暂存起来,分散到相对长的一段时间内处理,能大大提高系统的稳定性和用户体验。
3.消息分发:在大数据时代,数据对很多公司来说就像金矿,公司需要依赖对数据的分析,进行用户画像、精准推送、流程优化等各种操作,并且对处理的实时性要求越来越高。数据是不断产生的,各个分析团队、算法团队都要依赖这些数据来进行工作,这个时候有个可持久化的消息队列就非常重要。数据的产生方只需要把各自的数据写入一个消息队列即可,数据使用方根据各自需求订阅感兴趣的数据,不同数据团队所订阅的数据可以重复也可以不重复,互不干扰,也不必和数据产生方关联
在这里插入图片描述
除了上面说的,消息队列还可以用作分布式事务保证最终一致性,动态扩容等功能。

常见的消息队列对比

目前主流的消息队列有:RabbitMQ,RocketMQ, Kafka等选择消息队列需要满足以下几个要求:
开源
流行
兼容性强

RabbitMQ

RabbitMQ 2007年发布,是一个在AMQE(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之
优点:
1.RabbitMQ的特点Messaging that just works,“开箱即用的消息队列。RabbitMQ是一个相对轻量的消息队列,非常容易部署和使用;
2.多种协议的支持:支持多种消息队列协议,算得上是最流行的消息队列之一;
3.灵活的略由配置,和其他消息队列不同的是,它在生产者(Producer)和队列(Queue)之间增加了一个Exchange模块,你可以理解为交换机。这个Exchange模块的作用和交换机也非常相似,根据配置的路由规则将生产者发出的消息分发到不同的队列中。路由的规则也非常灵活,甚至你可以自己来实现路由规则。
4.健壮、稳定、易用、跨平台、支持多种语言、文档齐全,RabbitMQ的客户端支持的编程语言大概是所有消息队列中最多的5.管理界面较丰富,在互联网公司也有较大规模的应用;
6.社区比较活跃。
缺点:
1、RabbitMQ对消息堆积的处理不好,在它的设计理念里面,消息队列是一个管道,大呈的消息积压是一种不正常的情况,应当尽量去避免。当大量消息积压的时候,会导致RabbitMQ的性能急剧下降;
2、性能上有瓶颈,它大概每秒钟可以处理几万到十几万条消息,这个对于大多数场景足够使用了,如果对需求对性能要求非常高,那么就不太合适了。
3、RabbitMQ使用Erlang。开发,Erlang 的学习成本还是很高的,如果后期进行二次开发,就不太容易了。

RocketMQ

RocketMQ出自阿里公司的开源产品,用Java语言实现,在设计时参考了Kafka,并做出了自己的一些改进,消息可靠性上比Kafka更好。经历过多次双十一的考验,性能和稳定性还是值得信赖的,RocketMQ在阿里集团被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。
优点
1.单机吞吐量:十万级;
2.可用性:非常高,分布式架构;
3.消息可靠性︰经过参数优化配置,消息可以做到0丢失,RocketMQ的所有消息都是持久化的,先写入系统PAGECACHE,然后刷盘,可以保证内存与磁盘都有一份数据;
4.功能支持:MQ功能较为完善,还是分布式的,扩展性好;5.支持10亿级别的消息堆积,不会因为堆积导致性能下降;
6.源码是java,我们可以自己阅读源码,定制自己公司的MQ,可以掌控。
缺点
1.支持的客户端语言不多,目前是java及c++,其中c++不成熟;
⒉.社区活跃度一般,作为国产的消息队列,相比国外的比较流行的同类产品,在国际上还没有那么流行,与周边生态系统的集成和兼容
程度要略逊—筹;
3.没有在mq核心中去实现JMS等接口,有些系统要迁移需要修改大呈代码。

Kafka

Apache Kafka是一个分布式消息发布订阅系统。它最初由Linkedin公司基于独特的设计实现为一个分布式的提交日志系统( a distributedcommit log),之后成为Apache项目的一部分。
这是一款为大数据而生的消息中间件,在数据采集、传输、存储的过程中发挥着举足轻重的作用。
优点
1.性能卓越,单机写入TPS约在百万条/秒,最大的优点,就是吞吐量高;
2.性能卓越,单机写入TPS约在百万条/秒,消息大小10个字节;
3.可用性:非常高,kafka是分布式的,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用;
4.消费者采用Pull方式获取消息,消息有序,通过控制能够保证所有消息被消费且仅被消费一次;
5.有优秀的第三方Kafka Web管理界面Kafka-Manager;
6.在日志领域比较成熟,被多家公司和多个开源项目使用;
7.功能支持:功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用
缺点
1.由于“攒一波再处理”导致延迟比较高
2. topic不能创建过多,否则性能会比较低

Pulsar

Pulsar是一个用于服务器到服务器的消息系统,具有多租户、高性能等优势。Pulsar最初由Yahoo开发,目前由Apache软件基金会管理。
af2bba161e8921d90149f1ea7c5bbbee
优点
1.更多功能: Pulsar Function、多租户、Schema registry、n层存储、多种消费模式和持久性模式等;
2.Pulsar的单个实例原生支持多个集群,可跨机房在集群间无缝地完成消息复制;
3.极低的发布延迟和端到端延迟;
4.可无缝扩展到超过一百万个tdpic;
5.简单的客户端API,支持Java、Go、Python和C++。
6.Pulsar 的单个实例原生支持多个集群,可跨机房在集群间无缝地完成消息复制。
缺点
正处于成长期,流行度和成熟度相对没有那么高

RocketMQ介绍

介绍

阿里的消息中间件有很长的历史,从2007年的Notify到2010年的Napoli, 2011年升级后改为MetaQ,然后到2012年开始做RocketMQ,RocketMQ使用lava语言开发,于2016年开源。第一代的Notify主要使用了推模型,解决了事务消息;第二代的MetaQ主要使用了拉模型,解决了顺序消息和海量堆积的问题。RocketMQ基于长轮询的拉取方式,兼有两者的优点。
RocketMQ具有低延迟,高吞吐,高可用性和高可靠性等特点,适用于构建具有海量消息堆积,异步解耦功能的应用系统RocketMQ是使用java语言开发的,比起Kafka的Scala语言和RabbitMQ的Erlang语言,更容易找到技术人员进行定制开发

基本概念

RocketMQ由四部分组成
生产者(Producer):也称为消息发布者,是RocketMQ中用来构建并传输消息到服务端的运行载体消费者(Consumer) : 也称之为消息订阅者,是RocketMQ中用来接收并处理消息的运行实体
Broker:可以理解为消息中转角色,负责消息的存储和转发,接收生产者生产的消息并持久化消息;当用户发送的消息被发送到BrokerNameSeruer.:…NameServer可以看作是RocketMQ的注册中心,它管理两部分数据:集群的Topic-Queue的路由配置;Broker的实时配置信息。其它模块通过Namesery提供的接口获取最新的Topic配置和路由信息;各NameServer,之间不会互相通信,各NameServer都有完整的路由信息,即无状态。
. Producer/Consumer:通过查询接口获取Topic对应的Broker的地址信息和Topic-Queue的路由配置
Broker: 注册配置信息到NameServer,实时更新Topic信息到NameServer

在这里插入图片描述
主题(Topic) : Topic是RocketMQ中消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息,Topic是个逻辑概念,并不是实际的消息容器
消息队列(MessageQueue):队列是RocketMQ中信息存储和传输的实际容器,也是消息的最小存储单元
标签((Tag)∶可以看作子主题,它是消息的第二级类型,用于为用户提供额外的灵活性。使用标签,同一业务模块不同目的的消息就可以用相同Topic而不同的Tag 来标识。比如交易消息又可以分为:交易创建消息、交易完成消息等,一条消息可以没有Tag。

安装使用

网址: https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/5.0.0/
在这里插入图片描述
在这里插入图片描述
解压完成之后就可运行
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值