RocketMQ之2次深入学习,个人理解总结,写文章真耗时
RocketMQ 它是一个分布式消息队列
它的作用:
应用解耦:简单来说就是通过一个消息队列作为中间件来实现应用解耦,某个需要该消息的系统出现故障时要处理的内容会被缓存在消息队列里,以提高可用性。
流量消峰:通过消息队列缓存大量请求分到一段时间去处理,可以理解为定量分批处理的排队任务,比如一万个请求分10个1000处理,提高系统稳定性和用户体验。
消息分发:为的是做到多个系统之间数据流通互不干扰,需要的数据就去消息队列中取,提高了数据处理的实时性,将一些变更很少的结果数据放入消息队列可避免了重复计算。
各MQ产品对比:
ActiveMQ、RabbitMQ、RocketMQ、kafka
java语言开发:ActiveMQ、RocketMQ 使用成本更低,其他两个要重新学习一门新语言。
吞吐量: kafka、RocketMQ kafka>RocketMQ>RabbitMQ,RabbitMQ和ActiveMQ都是万级,差别不大
时效性:RabbitMQ RabbitMQ最好,其他几个差不多
分布式: kafka、RocketMQ 其他两个是主从,RocketMQ、kafka可用性非常高
其他,kafka会丢数据,功能相对单一,应用于大数据采集和日志分析,RabbitMQ消息累积会影响性能且吞吐量较低,适用规模小的业务,RocketMQ功能全面,适用几乎所有场景。
这是来自官方文档的一张截图,出自https://rocketmq.apache.org/docs/core-concept/
主题(Topic)是生产者传递信息和消费者拉取信息的类别。
消息(Message)是要传递的信息。一条消息必须要有一个主题,可以理解为您要邮寄的信的地址。消息可以有可选的标签和额外的键值对。
标签(tag就是子主题)来自同一业务模块的不同消息可能具有相同的主题和不同的标签。标签有助于保持代码的整洁和连贯,标签还可以简化RocketMQ提供的查询系统。
消息偏移量(一般指的是Message Queue下的offset)用于标识消息,可以把它当成消息队列中消息的下标
队列(Queue)主题被划分为一个或多个子主题,即消息队列。
代理服务器(Broker Server)消息中转,存储消息、转发消息,相当于邮局。
消息生产者(Producer)生产消息发送到broker,多种发送方式,同步发送、异步发送、顺序发送、单向发送,同步、异步需要Broker确认,单向发送不用。默认用轮询的方式实现负载平衡以平均落在不同的消息队列上,因queue可以落在不同的broker中,故实现了消息发送到不同的broker下。
消息消费者(Consumer)负责消费,分拉取式消费(Broker主动向Consumer推送)、推动式消费(Consumer从Broker拉取所需消息)。
名称服务器(Name Server)提供服务发现和路由服务,每个节点都有全部的路由信息和对应的读写服务,协调分布式系统的每个组件,生产者或消费者通过Name Server能查找各主题相应的Broker IP列表。
生产者组(Producer Group)生产者是线程安全的。默认情况下,您只能在相同的JVM中创建一个具有相同生产者组的生产者,如果发送的是事务消息且初始生产者在发送之后宕机,则Broker服务器会联系同一生产者组的其他生产者继续提交或回滚事务。
消费者组(Consumer Group)需要确保同一组中的每个消费者订阅相同的主题,分集群消费(同一Consumer Group的每个Consumer平均分摊消息)和广播消费(同一Consumer Group的每个Consumer都接收全部消息)。消息消费者集群模式本身就是一种负载均衡的体现。
自己用draw.io画的一张图
RocketMQ搭建在我另一篇文章:在VMware虚拟机Ubuntu系统中搭建的https://blog.csdn.net/CJ_L1995/article/details/115120580
还有很多晚点再补