java面试 - mq
RocketMq和RabbitMq的优缺点
1、RabbitMQ
优点:rabbitMq 几万级数据量,基于erlang语言开发,因此响应速度快些,并且社区活跃度比较活跃,可视化界面。
缺点:数据吞吐量相对与小一些,并且是基于erlang语言开发,比较重的问题难以维护。
2、RocketMQ
rocketMq几十万级别数据量,基于Java开发,应对了淘宝双十一考验,并且文档十分的完善,拥有一些其他消息队列不具备的高级特性。
如定时推送,其他消息队列是延迟推送,如 rabbitMq 通过设置 expire 字段设置延迟推送时间。又比如rocketmq实现分布式事务,比较可靠的。
1、如何保证系统的高可用
就rabbitMq而言,有镜像模式概念,就是用户在发送数据时候,发送到mq机器上,并且持久化磁盘,然后通过设置镜像的queue,把数的持久化地址对应表同步到另外mq机器上。这种就有效防止一台mq挂了以后,另外的mq可以直接对外提供消费功能。
就rocketMq而言,分为多主集群结构,多主多备异步复制结构,多主多备同步复制结构。
2、如何保证消息不会丢失
就rabbitmq而言,从生产者,消费者,消息队列角度分析。生产者而言,发送消息如果失败,则定义重试次数,一般设置成五次。
两种解决方式:
1、通过设置事务,进行事务回滚重试
2、通过发送者确认模式开启
方式一:channel.waitForConfirms()普通发送方确认模式;
方式二:channel.waitForConfirmsOrDie()批量确认模式;
方式三:channel.addConfirmListener()异步监听发送方确认模式;
RocketMq通过producer,broker,consumer端设置
1.Producer端:采取send()同步发送消息,发送结果是同步感知的。发送失败后可以重试,默认3次。
2.Broker端:修改刷盘策略为同步刷盘flushDiskType = SYNC_FLUSH,默认情况下是异步的。
3.Consumer端:完全消费后手动ack确认。
以下是RocketMq相关知识
RocketMq架构各个模块的功能
Producer 负责生产消息,一般由业务系统负责生产消息。一个消息生产者会把业务应用系统里产生的消息发送到broker服务器。RocketMQ提供多种发送方式,同步发送、异步发送、顺序发送、单向发送。同步和异步方式均需要Broker返回确认信息,单向发送不需要。
Broker,消息中转角色,负责存储消息、转发消息。在RocketMQ系统中负责接收从生产者发送来的消息并存储、同时为消费者的拉取请求作准备。
Consumer 负责消费消息,一般是后台系统负责异步消费。一个消息消费者会从Broker服务器拉取消息、并将其提供给应用程序。从用户应用的角度而言提供了两种消费形式:拉取式消费、推动式消费。
NameServer 担任路由消息的提供者。生产者或消费者能够通过NameServer查找各Topic相应的Broker IP列表分别进行发送消息和消费消息。nameServer由多个无状态的节点构成,节点之间无任何信息同步。
RocketMq消费模式
消费模型由Consumer决定,消费纬度为Topic
1.集群消费,一条消息只会被同Group中的Consumer消费,多个group同时消费一个Topic时,每个group都会有一个consumer消费到数据。
2.广播消费,消息对每一个consumer group下的各个consumer实例都消费一遍
RocketMq的优势:
1.吞吐量高,单机的吞吐量可达十万级。
2.可用性高
3.消息可靠性高,经过参数优化配置,消息可以做到0丢失
4.支持10亿级别的消息堆积,不会因为堆积导致性能下降
5.稳定性高,经过阿里双十一的验证
RocketMq如何保证消息不丢失
1.Producer端:采取send()同步发送消息,发送结果是同步感知的。发送失败后可以重试,默认3次。
2.Broker端:修改刷盘策略为同步刷盘flushDiskType = SYNC_FLUSH,默认情况下是异步的。
3.Consumer端:完全消费后手动ack确认。
RocketMq如何保证消息顺序消费
首先要根据业务确认是否需要保证消息顺序,如果不需要则不用管,如果需要rocketMq给我们提供了MessageQueueSelector 接口,可以自己重写里面的接口,实现自己的算法。
RocketMq消息堆积如何处理
首选确认是Producer生产的消息太多消费者consumer消费不过来还是其它情况,如果是消费者不够的话可以通过上线更多consumer来临时解决问题。
另外一种方式是新上线一台consumer把原来的Topic中的消息挪到新的Topic中,不做业务处理。
RocketMq分布式事务实现原理:
rocketMq特点之一就是支持分布式事务,分布式事务可以使用TCC(Try, Confirm, Cancel), 2pc来解决分布式系统中消息的原子性。
rocketMq实现方式:
Half Message:预处理,当broker收到消息后,会存储到 RMQ_SYS_TRANS_HALF_TOPIC的消息消费队列中,Broker会开启一个定时任务,消费 RMQ_SYS_TRANS_HALF_TOPIC队列中的消息,每次执行任务会向Producer发送确认事务执行状态(提交,回滚,未知),如果是未知Broker会定时回调重新检查。如果超过过查询次数默认会回滚消息。也就是Producer产生的消息并未真正进入Topic的Queue,而是用了临时queue来存放所谓的half message,等事务提交后才真正的将half message转移到topic下的queue。
详情以及实现方式见: https://blog.csdn.net/qq_42877546/article/details/125404307?spm=1001.2014.3001.5502
RocketMq部署方式,一般选择后两种
1.单个Master
单机模式,即只有一个Broker,如果Broker宕机了会导致mq服务不可用。
2.多Master
组成一个集群,集群没个节点都是Master节点,配置简单,性能也是最高的,某个节点宕机重启不会影响mq服务。
缺点:如果某个节点宕机了,会导致该节点存在未被消费的消息,在节点恢复之前不能被消费。
3.多Master多Slave模式,异步复制
每个Master配置一个Slave,多对Master-Slave,Master与Slave消息采用异步复制
优点:Master宕机后消费者可以从Slave节点进行消费,采用异步模式复制提升了一定的吞吐量。
缺点:如果Master宕机,如果磁盘损坏没有及时将消息复制到Slave会导致少量消息丢失。
4.多Master多Slave模式,同步双写
Master与Slave采用同步方式复制消息,只有master和slave都写入成功后才会向客户端返回成功
优点:数据与服务都无单点,Master宕机情况下,消息无延迟,服务可用性和数据可用性非常高
缺点:会降低消息写入效率,影响吞吐量
相关文章:
java面试 - mq
RocketMq和RabbitMq的优缺点 1、RabbitMQ 优点:rabbitMq 几万级数据量,基于erlang语言开发,因此响应速度快些,并且社区活跃度比较活跃,可视化界面。 缺点:数据吞吐量相对与小一些,并且是基于er…...
PTP GPTP芯片资料翻译88E6352
88E6352应用 网关 车载信息娱乐 车身域控制器 PTP PTP通过周期型地交换控制包实现 选择其中网络最佳质量时钟元素,作为PTP网络中Grand Master.没有Grand Master 节点变成PTP slave节点。PTP节点从Grand Master节点获得他们驱动频率和时间信息。 基本观念是PTP帧…...
用Python实现一个电影订票系统
一、效果展示通过Python实现一个电影订票系统,效果如下所示:二、整体结构图三、代码分解3.1 infos.py一部电影的详细信息适合用 字典 结构来存储,我们可以给字典里添加多个键值对来保存电影的名称、座位表和宣传时用的字符画,比如…...
什么是瞪铃企业
“瞪羚企业”是指创业后跨过死亡谷以科技创新或商业模式创新为支撑进入高成长期的中小企业。认定范围主要是产业领域符合国家和省战略新兴产业发展方向,涵盖新兴工业、新一代信息技术、生物健康、人工智能、金融科技、节能环保、消费升级等领域。按照硅谷的解释&…...
【深度学习】多分类问题和多标签分类问题
上一章——激活函数 文章目录什么是多分类问题Softmax贝叶斯公式softmax的损失函数多标签分类问题什么是多分类问题 在之前的课程中,我们学习了二分问题,二分问题中的所有数据会被分类为0和1(或者Ture和False)两种输出标签。但是…...
大学生开学买什么,返校必备数码好物推荐
开学还不知道需要准备些什么,这篇开学数码好物,希望能够对你在开学购买的好物有一些帮助,一款好的数码装备,可以让我们在学校学习当中能够用最少的时间,最大的产出,节省时间,提高学习效率&#…...
Unreal Engine06:Actor的实现
写在前面 Actor是可以放进地图的最基本类,这里主要是介绍一下Actor的使用。 一、空间坐标系 1. Actor的变换操作 Actor的变换变换操作主要包括四个部分: 位置;旋转;缩放; 上面三者都是对应三个轴进行变换࿱…...
2023美国大学生数学建模竞赛C题思路解析(含代码+数据可视化)
以下为2023美国大学生数学建模竞赛C题思路解析(含代码数据可视化)规则:猜词,字母猜对,位置不对为黄色,位置对为绿色,两者皆不对为灰色。困难模式下的要求:对于猜对的字母(…...
aws codebuild 自定义构建环境和本地构建
参考资料 Extending AWS CodeBuild with Custom Build Environments Docker in custom image sample for CodeBuild codebuild自定义构建环境 在创建codebuild项目的时候发现 构建环境是 Docker 映像,其中包含构建和测试项目所需的所有内容的完整文件系统 用ru…...
3年功能3年自动化,从8k到23k的学习过程
简单的先说一下,坐标杭州,14届本科毕业,算上年前在阿里巴巴的面试,一共有面试了有6家公司(因为不想请假,因此只是每个晚上去其他公司面试,所以面试的公司比较少)其中成功的有4家&…...
leaflet: 数据聚合,显示当前bounds区域中的点的名称列表(078)
第078个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中实现数据聚合的功能 ,左边列出右边可视区域内的marker的名称。这里主要用到了可视区域的范围以及contains函数。 直接复制下面的 vue+leaflet源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方…...
XXL-JOB分布式任务调度框架(一)-基础入门
文章目录1.什么是任务调度2.常见定时任务方案2.1. 传统定时任务方案示例2.2. 缺点分析3.什么是分布式任务调度?3.1. 并行任务调度3.2. 高可用3.3. 弹性扩容3.4. 任务管理与监测4.市面上常见的分布式任务调度产品5.初识xxl-job6.xxl-job架构设计6.1.设计思想6.2.架构…...
基于CentOS 7 搭建Redis 7集群
我们的目标是使用2台(多台服务器类似)服务器搭建一个3主3从的redis集群。 我们为什么要使用redis 7呢?因为6、7的版本都做了大量优化,比如6引入了多线程(一些JAVA八股文面试还喜欢问redis为什么是单线程)&…...
Lesson5.3---Python 之 NumPy 统计函数、数据类型和文件操作
一、统计函数 NumPy 能方便地求出统计学常见的描述性统计量。最开始呢,我们还是先导入 numpy。 import numpy as np1. 求平均值 mean() mean() 是默认求出数组内所有元素的平均值。我们使用 np.arange(20).reshape((4,5)) 生成一个初始值默认为 0,终止…...
Puppeteer 爬虫学习
puppeteer简介: Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议 控制 Chromium 或 Chrome。Puppeteer 默认以 headless 模式运行, 但是可以通过修改配置文件运行“有头”模式。能作什么?: 生成…...
如何在Power Virtual Agents中实现身份验证
今天我们介绍一下如何通过身份验证的方式来使用Power Virtual Agents。首先进入“Microsoft 365-管理-Azure Active Directory管理中心”。 进入“Azure Active Directory管理中心”后选择“Azure Active Directory”中的“应用注册”-“新注册”。 输入新创建的应用程序名称后…...
金三银四必备软件测试必问面试题
初级软件测试必问面试题1、你的测试职业发展是什么?测试经验越多,测试能力越高。所以我的职业发展是需要时间积累的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前 3 年积累测试经验,按如何做好测试工程…...
Java反序列化漏洞——CommonsCollections6链分析
一、前因因为在jdk8u71之后的版本中,sun.reflect.annotation.AnnotationInvocationHandler#readObject的逻辑发生了变化,导致CC1中的两个链条都不能使用,所有我们需要找一个在高版本中也可用的链条。/* Gadget chain: java.io.ObjectInputStr…...
Selenium浏览器自动化测试框架
Selenium浏览器自动化测试框架 目录:导读 1、selenium简介 介绍 功能 优势 2、基本使用 3、获取单节点 4、获取多节点 5、节点交互 6、动作链 7、执行JavaScript代码 8、获取节点信息 9、切换frame 10、延时等待 11、前进和后退 12、cookies 13、选…...
Hashmap链表长度大于8真的会变成红黑树吗?
1、本人博客《HashMap、HashSet底层原理分析》 2、本人博客《若debug时显示的Hashmap没有table、size等元素时,查看第19条》 结论 1、链表长度大于8时(插入第9条时),会触发树化(treeifyBin)方法,但是不一定会树化,若数组大小小于…...
关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮地
除了正确进行接地设计、安装,还要正确进行各种不同信号的接地处理。控制系统中,大致有以下几种地线: (1)数字地:也叫逻辑地,是各种开关量(数字量)信号的零电位。 (2&am…...
排序
一、数据流中的中位数题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。…...
Android DataStore Proto存储接入流程详解与使用
一、介绍 通过前面的文字,我们已掌握了DataStore 的存储,但是留下一个尾巴,那就是Proto的接入。 Proto是什么? Protobuf,类似于json和xml,是一种序列化结构数据机制,可以用于数据通讯等场景&a…...
HiEV洞察 | 卖一台亏半台,激光雷达第一股禾赛隐忧仍在
作者 | 感知君Alex 编辑 | 王博2月9日晚,禾赛在万众瞩目下登陆纳斯达克,发行价19美元每股,首日涨超11%,市值超过Luminar,登顶全球市值最高的激光雷达公司。 随后两个交易日,其股价均有不同程度的涨幅&#…...
面试题61. 扑克牌中的顺子
题目 从若干副扑克牌中随机抽 5 张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视…...
有特别有创意的网站设计案例
有人说 UI 设计师集艺术性与科学性于一身,不仅需要对工具的使用熟练,更需要对美术艺术有一定的基础了解。如果想要成为优秀的 UI 设计师是一个需要磨砺的过程,需要不断的学习和积累,多看多练多感受,其中对于优质的设计…...
Python基础-数据类型之列表
一、列表的定义 name ["小明", "小红", "笑笑"] 二、列表的使用 除了序列中的操作,列表还有一些其他的操作。 (1)不使用列表方法对列表进行修改 1:通过索引修改列表中的值 name ["Kit…...
Linux系统基本设置:网络设置(三种界面网络地址配置)
网络地址配置:图形界面配置、命令行界面配置、文本图形界面配置 命令行界面配置 查看网络命令: 想要知道你有多少网卡,都可以通过这两个命令来查看 手动设置网络参数,我们可以使用nmcli这个命令来设置,我们需要知道…...
MySQL(二):查询性能分析
文章目录一、使用explain进行分析二、如何优化数据的访问三、如何重构大查询一、使用explain进行分析 Explain 用来分析 SELECT 查询语句,开发人员可以通过分析 Explain 结果来优化查询语句。 比较重要的字段有: select_type : 查询类型,有…...
Java基础-类加载器
写在前面的话: 基础加强包含了: 反射,动态代理,类加载器,xml,注解,日志,单元测试等知识点 其中最难的是反射和动态代理,其他知识点都非常简单 由于B站P数限制,…...
遵义网站建设优化公司/互联网行业都有哪些工作
获得微秒级的时间 收藏 Win 下建议如下方式: http://www.vckbase.com/document/viewdoc/?id1301 VC中基于 Windows 的精确定时 中国科学院光电技术研究所 游志宇 在工业生产控制系统中,有许多需要定时完成的操作,如定时显示当前时间&#x…...
网站icp备案咋做/泉州网站seo外包公司
手机带电脑上网 A. 手机和电脑都是wlan方式。 手机: 设置 / 无线和网络 / 绑定与便携式热点 / 便携式WLAN热点 , 打上勾; 如果你要加上密码, 配置一下“配置WLAN热点” 电脑: 如果上一步你没有修改 “配置WLAN热点…...
好的设计师网站有哪些/seo技术网网
对于单页应用,官方提供了vue-router进行路由跳转的处理,本篇主要也是基于其官方文档写作而成。安装基于传统,我更喜欢采用npm包的形式进行安装。npm install vue-router --save当然,官方采用了多种方式进行安装,包括bo…...
网站如何收录/网红推广团队去哪里找
MATLAB同其他高级语言一致,有三种基本程序结构: 顺序结构;选择结构;循环结构 MATLAB流程控制语句主要有: ForWhileif-else-endswitch-case 常用命令: BreakContinue以及matlab特有的try命令࿰…...
茂名专业做网站/搜索引擎优化的基础是什么
选择合适的存储引擎一、选择合适的存储引擎二、数据库优化之创建合适的索引?一、选择合适的存储引擎 在开发中,我们经常使用的存储引擎 myisam / innodb/ memory MyISAM存储引擎 如果表对事务要求不高,同时是以查询和添加为主的,我们考虑…...
深圳市企业服务体系平台建设方案/全网优化哪家好
以下介绍经常使用的集合类,这里不介绍集合类的使用方法,只介绍每个集合类的用途和特点,然后通过比较相关集合类的不同特点来让我们更深入的了解它们。Collection接口Collection是最基本的集合接口,一个Collection代表一组Object&a…...