消息队列(5):RocketMQ

介绍

RocketMQ是一款成熟的分布式消息中间件。
由阿里2012年开源,2017年成为Apache顶级项目。
源码是java写的。
高性能,低延迟,高可靠。历经多次双十一大促,整体很稳定。

RocketMQ对比其他mq的优势

对比kafka和Rabbitmq,RocketMQ优势如下:
1.支持事务型消息。
2.可以支持指定时间的延迟消费,但不能指定任意时间,RocketMQ有18个延迟级别。
3.支持消费失败的重试。
4.consumer可以tag过滤,tag可以理解为比topic更一个细粒度的子主题。
5.支持重复消费,这个kafka也支持。

RocketMQ需要注意

Rocket不能完全保证消息的消费是有且只有一次,只能保证至少一次。
所以在设计消费端的时候,要特别注意幂等性。或者你的系统允许少量的消息重复。

RocketMQ核心四大组件

NameService,Broker,Producer,Consumer
每个组件可以部署成集群模式水平扩展。
在这里插入图片描述

1、Producer负责发消息,有3种发送方式

1.同步发送:重要场景,发一条要等接收方反馈成功,才会继续发。
2.异步发送:对响应时间有要求的场景,发一条后不等反馈,直接再发。
3.单向发送:量大但可靠性要求不高的场景,如日志收集。
同步发送就像打电话,你说一句,听到对面反馈了,再说。
异步发送就像发微信,你只管一直发,对面看到后也会反馈。
单向发送就像写信,写出去就不管了

2、Consumer负责消费消息,有2种消费方式

1.拉取型消费(DefaultMQPushConsumer):主动拉消息
2.推送型消费(DefaultMQPullConsumer):先去注册消费监听器,监听器被触发才会消费

3、Broker负责存储消息

接收Producer发的消息,存储,Consumer从这里拉取消息。
Broker有两个角色,Master和Slave。了解分布式协议的,对这两个主从角色肯定不陌生。
Broker集群部署有4种方式:
1.单Master,即只有一个主
一旦宕机,服务不可用,单机测试用,生产不会用
2.多Master,即都是主
单个Master宕机,服务还是可用的,但宕机期间该机器的消息不能被实时消费了
3.多Master多Slaver(同步双写)
每个Master都配一个Slaver,写消息的时候,主从都写成功才算成功。
这个是解决了上一个主宕机后消息不能被实时消费的问题,但由于得写两份,性能略受影响
4.多Master多Slaver(异步复制)
每个Master都配一个Slaver,写消息的时候,主成功就成功返回,之后异步复制消息到从。
主从消息延迟是毫秒级。
这个是解决了上一个写两份的性能问题,但在主宕机且不可恢复的情况下,可能会由于消息延迟复制的原因,导致少量消息丢失。

这四种方式,每一种都是为了解决上一种的问题所作出的改进,但同时又会带来新的问题。
但慢慢的,可以将问题降到一个可人为控制并且可接受的范围内。
所以,在不考虑成本的情况下,第四种是最优的,但往往企业都会将成本放在比较高的位置,所以鱼与熊掌不可兼得。

4、NameServer负责保存Broker相关元信息并给生产者和消费者查找Broker信息

每个Broker启动的时候都会在NameServer注册,生产者在发送消息前也会根据Topic到这里获取Broker的路由信息。消费者也会定时获取topic的路由信息。
完全可以将NameServer理解成一个注册中心,因为早期没有NameServer的时候,这个位置是用Zookeeper代替的。

5、ProducerGroup & ConsumerGroup

ProducerGroup可以理解为一个发消息的应用,一个Producer Group下包含多个Producer实例。
ConsumerGroup可以理解为一个拿消息应用,一个Consumer Group下包含多个Consumer实例。
Producer实例或者Consumer实例,可以是多态机器,也可以是一台机器的多个进程,也可以是一个进程的多个对象。
一个Producer Group可以发送多个Topic消息。
一个Consumer Group下的多个Consumer以均摊方式消费消息,如果设置为广播方式,那么这个Consumer Group下的每个实例都消费全量数据。
在这里插入图片描述

RocketMQ的消息Message

topic:

一条消息必须要有一个主题topic,这个和大部分消息中间件一样。

tag:

此外Message还有一个标签的概念,可以理解为子主题,可用可不用。
同一个topic下,当消息还有更细粒度的区分时,就可以通过tag标签来标记。

RocketMQ的消费模式

集群消费

默认是集群消费。
一个消费者集群共同消费一个主题。

广播消费

消息会发给消费组中的每一个消费者消费。

批量消费

consumer.setConsumeMessageBatchMaxSize(10);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499790.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[错误记录] --- rocketmq批量消费设置参数的问题

rocketmq想支持批量消费,于是便设置以下参数: consumer.setConsumeMessageBatchMaxSize(1000);这样是正确的,但由于业务要求,还想再设置大点,于是设置成这样: consumer.setConsumeMessageBatchMaxSize(10…

阿波罗配置中心(apollo)的个人看法

阿波罗应该是近几年比较火的一个分布式配置中心了,说说我个人的理解,希望对一些人有用吧。 首先从使用者的角度想 我们怎么用配置中心的? 1.得有个页面,能有权限管理,能有创建配置key-value。 在阿波罗中&#xff…

消息队列(4):Kafka

介绍 kafka是一个支持分布式的消息系统,基于发布/订阅模式。 kafka由LinkedIn公司开发,2010年成为Apache顶级项目。 源码是由java写的。 基本概念 1、Broker kafka集群中的每台机器,都叫一个broker. 2、Topic(主题&#xff0…

clickhouse的ReplacingMergeTree引擎实战

学习ReplacingMergeTree引擎,首先你得了解clickhouse的MergeTree引擎,因为ReplacingMergeTree引擎是MergeTree引擎的一个扩展版引擎,他拥有和MergeTree一样的功能,同时新增了一个删除相同主键数据的功能。 我们知道,cl…

clickhouse 分片

我们知道mysql数据库如果想做分片,需要使用第三方组件,这是因为mysql在设计之初就没有太多考虑分布式等问题。而clickhouse作为新生代性能之王,分片也是必须的功能。基本上从2015年之后的各种数据库也罢,框架也罢,都开…

[记录] ---阿里云java.io.IOException: Connection reset by peer的问题

项目部署到阿里云,突然报错,频繁的打印堆栈信息,一开始是把堆内存打满导致服务一直重启,调大堆内存后就不影响正常服务了,但还是一直打堆栈,虽说日志会自动清理,但一直打这个信息着实不好看。 最…

实用的java代码生成器,开箱即用(基于mybatisplus的AutoGenerator)

spring-boot工程下&#xff0c;自动生成代码&#xff0c;controller层&#xff0c;service层&#xff0c;mapper层。 根据数据库配置好的表&#xff0c;逆向生成实体类和各层结构 1、引入maven <dependency><groupId>com.baomidou</groupId><artifactId&…

mac/windows 端口占用解决记录

idea启动报错&#xff1a;端口占用 The port may already be in use or the connector may be misconfigured mac端口占用解决 zhangshuaideMacBook-Pro:~ zhangshuai$ lsof -i:8095 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME Google 375 zhangshuai 32u IPv6 0x…

skywalking(1) 基于opentracing规范的APM系统

skywalking是&#xff1a; 基于opentracing规范的APM系统 skywalking解决了什么问题&#xff1f; skywalking解决微服务架构下&#xff0c;多服务直接复杂的调用关系 了解dapper&#xff0c;分布式链路追踪系统 dapper又是谷歌论文&#xff0c;各公司又相继模仿。&#xff…

skywalking(4)

Byte Buddy库 统计方法调用时长 1、增强字节码 2、拦截器拦截 类似于spring的aop&#xff0c;只不过skywalking不能用aop&#xff0c;所以用Byte Buddy技术代替 Open Trace 整个trace调用&#xff0c;是由多个span组成的有向无环图&#xff08;就是调用关系图&#xff09;。…

kubernetes(k8s)

应用部署演进过程 我们从上图可以看到&#xff0c;应用越来越看重应用本身了&#xff0c;慢慢的不受物理机的差异&#xff0c;不受操作系统的差异&#xff0c;开发者可以花更多精力去到应用本身。 k8s概念 简单理解&#xff0c;k8s就是传统的云平台上的linux。 kubernetes是…

为什么要用Elasticsearch

概念 Elasticsearch 简称ES&#xff0c;是一个分布式全文检索引擎。 比如github的代码检索就是用了ES&#xff0c;百度也有用ES。 由于Lucene的api相对比较复杂&#xff0c;所以ES其实是对Lucene的封装简化&#xff0c;并且提供了一套比较简单的api文档。 es官网 使用场景 主…

赶紧看一下mysql8.0版本的新特性,你的数据库是不是该升级了

这里写目录标题前言mysql8.0的新特性1、账户安全2、优化器索引2.1、隐藏索引&#xff08;invisible&#xff09;2.2、降序索引2.3、函数索引3、SQL语句增强4、新增数据分析函数5、InnoDB增强5.1、优化了一些元数据文件5.2、将系统表mysql和数据字典表&#xff0c;全部改为InnoD…

ThreadLocal不仅要应付面试,更要真的理解,真的会用

前言 记得我几年前第一次面试的时候&#xff0c;就是被问了这个&#xff0c;记得面试官直接就让我说说ThreadLocal的实现原理以及平时有没有见过哪些地方用到了。 我当时初入职场&#xff0c;还是一个大菜鸟&#xff0c;所以直接就被干蒙了&#xff0c;至今还记忆犹新。 闲来…

Base64编码的原理与常用实现

这篇主要是为了后面好介绍加密算法&#xff0c;做的铺垫。 这个是基础&#xff0c;什么是一个程序员的涵养&#xff0c;这些基础就是涵养。 平时可能用不到&#xff0c;但必须得会。 如果连这个原理都说不上来&#xff0c;就别玩王者荣耀绝地求生英雄联盟和平精英了&#xff0c…

MD5算法原理与常用实现

目录定义MD5特点常见应用场景1、校验文件的完整性2、存储用户密码原理1、填补信息2、拿到初始值3、真正的计算MD5为什么不可逆java实现和使用定义 MD全称Message-Digest&#xff0c;即信息摘要&#xff0c;所以MD家族的算法也叫信息摘要算法 MD家族有MD2、MD3、MD4、MD5&#…

SHA算法原理与常用实现

看本文前&#xff0c;最好先看看之前的这一篇关于MD5算法的介绍。 MD5算法原理与常用实现 本文目录定义MD5和SHA-1的碰撞问题常见应用场景1、类似MD5的应用场景2、比特币3、https签名算法会用到SHA-256算法原理1、填补信息2、拿到初始值3、真正的计算java实现和使用定义 SHA算…

MAC算法原理与常用实现

看本文前&#xff0c;最好先看看之前的对于MD5算法和SHA算法的介绍。 本文目录定义常见应用场景1、linux客户端&#xff1a;SecureCRT2、Google身份验证器3、银联pos机终端原理java实现和使用定义 MAC&#xff08;Message Authentication Codes&#xff09;&#xff0c;是一种…

面试 HTTP ,99% 的面试官都爱问这些问题

HTTP 和 HTTPS 的区别HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol)&#xff0c;HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范HTTP 主要内容分为三部分&#xff0c;超文本&#xff08;Hypertext&#xff09;、传输…

@JsonFormat失效解决

先说结论 JsonFormat失效&#xff0c;换成JSONField就好了 问题经过和原理 JsonFormat作为Date类型的属性值&#xff0c;返回前端格式化处理&#xff0c;很方便。 比如&#xff1a; JsonFormat(pattern "yyyy/MM/dd HH:mm:ss")private Date updateTime;返回给前端…