mq 面试

老生常谈

 顺序发送


    只用一个消费者去消费该队列
             为了吞吐量的话,有多个消费者去消费怎么办 ? 保证入队有序就行,出队以后的顺序交给消费者自己去保证,没有固定套路
    通过一定算法,将一组顺序消息发送到同一个broker下面的同一个队列,消费者进行顺序监听即可。
    例如:一条信息的唯一标识 通过一定算法 路由到 同一个 broker 下到 某一个队列下。 通过业务层面处理。


     RocketMQ通过MessageQueueSelector中实现的算法来确定消息发送到哪一个队列上
    RocketMQ默认提供了两种MessageQueueSelector实现:随机/Hash
    当然你可以根据业务实现自己的MessageQueueSelector来决定消息按照何种策略发送到消息队列中。


丢失消息


    三个角度来分析:生产者弄丢数据、消息队列弄丢数据、消费者弄丢数据。
    先持久化数据。
    生产端:可以指定发送次数,失败后 异常处理
    消费端:重试-进行重新消费问题(注意幂等性问题,数据库或者分布式锁) 。 一般指定次数。超过限制则记录 日志表 进行人工补偿机制
    启用ack


重复消费消息


    如RabbitMQ是发送一个ACK确认消息,RocketMQ是返回一个CONSUME_SUCCESS成功标志,kafka实际上有个offset的概念
    业务方面:
        1.消费端处理消息的业务逻辑保持幂等性
        2.保证每条消息都有唯一编号且保证消息处理成功与去重表的日志同时出现
        3.第三方介质,来做消费记录。以redis为例,给消息分配一个全局id,只要消费过该消息,将<id,message>以K-V形式写入redis。那消费者开始消费前,先去redis中查询有没消费记录即可。


消息积压问题


    解决办法
    1.对生产者发消息接口进行适当限流(不太推荐,影响用户体验)
    2.多部署几台消费者实例(推荐)
    3.适当增加 prefetch 的数量,让消费端一次多接受一些消息(推荐,可以和第二种方案一起用)
    4.增加消费者的多线程处理
    https://blog.csdn.net/hanguihb/article/details/123493103

原理及应用,原理和机制
消息中间件kafka,RabbitMQ等,掌握rocketMQ原理及集群布署

rocketmq
    集群架构模型


        多Master模式:一个集群无Slave
            优点:配置简单,单个Master宕机或重启维护对应用无影响。
            缺点:单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到影响
        多 Master 多 Slave 模式HA采用异步复制方式,主备有短暂消息延迟(毫秒级)
            优点:同时Master宕机后,消费者仍然可以从Slave消费
            缺点:Master宕机,磁盘损坏情况下会丢失少量消息。
        多 Master 多 Slave 模式,同HA采用同步双写方式,即只有主备都写成功,才向应用返回成功
            优点:数据与服务都无单点故障,Master宕机情况下,消息无延迟,服务可用性与数据可用性都非常高;
            缺点:性能比异步复制模式略低(大约低10%左右),发送单个消息的RT会略高,且目前版本在主节点宕机后,备机不能自动切换为主机。
        Dledger 模式
            采用 Master-Slave 架构来部署,能在一定程度上保证数据的不丢失,也能保证一定的可用性;
            缺陷很明显,最大的问题就是当 Master Broker 挂了之后 ,没办法让 Slave Broker 自动 切换为新的 Master Broker
            ,需要手动更改配置将 Slave Broker 设置为 Master Broker,以及重启机器,这个非常麻烦。
            在手式运维的期间,可能会导致系统的不可用。
            使用 Dledger 技术要求至少由三个 Broker 组成 ,一个 Master 和两个 Slave,这样三个 Broker 就可以组成一个 Group ,也就是三个 Broker 可以分组来运行。
            一但 Master 宕机,Dledger 就可以从剩下的两个 Broker 中选举一个 Master 继续对外提供服务。
            三个 NameServer 极端情况下,确保集群的可用性,任何两个 NameServer 挂掉也不会影响信息的整体使用。


参考:https://www.cnblogs.com/xwgblog/p/14055449.html

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

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

相关文章

《长安的荔枝》阅读笔记

《长安的荔枝》阅读笔记 2023年6月9号在杭州的小屋读完&#xff0c;作者以“一骑红尘妃子笑”的典故&#xff0c;想象拓展出来的荔枝使李善德&#xff0c;为了皇帝要求在贵妃寿辰&#xff0c;六月一号那天要吃到10斤的荔枝。需要从广州运送到长安即如今的西安。本来以为这个差事…

【javaSE】 实现图书管理系统

目录 整体思路 Book包 Book类 BookList类 user包 User类 NormalUser类 AdminUser管理员类 testmain包 opera包 IOPeration接口 普通用户 ExitOperation类 FindOperation类 BrrowOperation类 ReturnOperation类 管理员 AddOperation类 DelOperation类 ShowOp…

聊聊我的故事-悲惨的童年

目录 前言一、介绍二、17年回顾1.出生2.上幼儿园3.上小学4.上初中 高中总结 前言 本人是06年生的&#xff0c;快18了&#xff0c; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、介绍 本人已经17了&#xff0c;在这17年过的很悲惨&#xff0c;也…

python中数据可视化

1.掷一个D6和一个D10 50000次的结果 die.py from random import randintclass Die:def __init__(self, num_sides6):self.num_sides num_sidesdef roll(self):return randint(1, self.num_sides) die_visual.py from die import Die from plotly.graph_objs import Bar, L…

跨域情况下,vue如何下载后台接口提供的application/octet-stream文件流Excel文件

前言 由于跨域&#xff0c;所以无法直接通过window.location.href或者a标签直接下载&#xff0c;直接拼后台接口地址又暴露了后台地址&#xff0c;不可行。 所以在这种跨域情况下&#xff0c;本章讲一下vue如何下载后台接口提供的application/octet-stream文件流Excel文件。 …

Day11-Webpack前端工程化开发

Webpack 一 webpack基本概念 遇到问题 开发中希望将文件分开来编写,比如CSS代码,可以分为头部尾部内容,公共的样式。 JS代码也希望拆分为多个文件,分别引入,以后代码比较好维护。 本地图片,希望可以实现小图片不用访问后端,保存在前端代码中就可以了 运行程序时我…

软件测试面试总结——http协议相关面试题

前言 在PC浏览器的地址栏输入一串URL&#xff0c;然后按Enter键这个页面渲染出来&#xff0c;这个过程中都发生了什么事?这个是很多面试官喜欢问的一个问题 如果测试只是停留在表面上点点点&#xff0c;不知道背后的逻辑&#xff0c;是无法发现隐藏的bug&#xff0c;只能找一…

iOS 后台运行

iOS后台行&#xff0c;一般有两种方式&#xff1a; 1.UIBackgroundTaskIdentifier后台任务标记时, 2.设置后台运行模式&#xff0c;需要有voip&#xff0c;location功能的才行。不然app上线审核肯定是过不了的。 下面是我学习后台运行的尝试过程。 一.首先创建一个项目功程…

NFS服务器

目录 1.nfs简介 2.nfs安装与配置简述 安装包&#xff1a; 配置文件&#xff1a; /etc/exports配置文件的写法 权限&#xff1a;&#xff08;客户端对共享目录的权限&#xff0c;但是最主要的还是目录本身的权限&#xff09; 3.nfs配置 服务端 客户端 4.autofs自动挂载…

第20节 R语言医学分析:某保险医疗事故赔偿因素分析

文章目录 某保险医疗事故赔偿因素分析源码源文件下载某保险医疗事故赔偿因素分析 我们分析数据集“诉讼”的第一个方法是确定样本数量、变量类型、缩放/编码约定(如果有)用于验证数据清理。 接下来,数据集看起来很干净,没有缺失值,并且对于分类变量,将编码约定替换为实际…

1.Kubernetes

文章目录 KubernetesK8S概述作用为什么使用K8S主要功能Kubernetes 集群架构与组件总结&#xff1a; 核心组件Master组件Kube-apiserverKube-controller-managerKube-scheduler工作 配置存储中心etcd Node组件KubeletKube-Proxydocker 或 containerd 总结&#xff1a; 工作流程K…

Docker离线安装

Docker离线安装 一、安装步骤 1. 下载 Docker 二进制文件&#xff08;离线安装包&#xff09; 下载地址&#xff1a;https://download.docker.com/linux/static/stable/x86_64/ 注&#xff1a;本文使用 /x86_64/docker-18.06.1-ce.tgz&#xff0c;注意对应操作系统类型。 2.…

组合模式(Composite)

组合模式是一种结构型设计模式&#xff0c;主要用来将多个对象组织成树形结构以表示“部分-整体”的层次结构&#xff0c;因此该模式也称为“部分-整体”模式。简言之&#xff0c;组合模式就是用来将一组对象组合成树状结构&#xff0c;并且能像使用独立对象一样使用它们。 Co…

PHP语言基础知识(超详细)

文章目录 前言第一章 PHP语言学习介绍 1.1 PHP部署安装环境1.2 PHP代码工具选择 第二章 PHP代码基本语法 2.1 PHP函数知识介绍2.2 PHP常量变量介绍 2.2.1 PHP变量知识&#xff1a;2.2.2 PHP常量知识&#xff1a; 2.3 PHP注释信息介绍2.4 PHP数据类型介绍 2.4.1 整形数据类型2.4…

Linux安装部署并使用Redis(包含Redis Desktop Manager界面化工具)

文章目录 前言一、Redis的简介二、redis的安装与配置&#xff08;Linux环境&#xff09;三、redis的使用&#xff08;Redis Desktop Manager界面化&#xff09;四、基本命令**String基本命令&#xff1a;****hash基本命令&#xff1a;****List基本命令&#xff1a;****set基本命…

C++ STL快速应用

STL 容器 STL容器有共同的操作接口&#xff0c;包括初始化操作、判空、查看大小、比较元素、销毁、交换&#xff0c;这些操作都是一样的接口。 对于访问遍历元素&#xff08;增删改查&#xff09;&#xff0c;都可以使用迭代器&#xff08;正向&#xff09;进行操作&#xff0c…

1分钟解决github push/pull报错443

1.打开https://www.ipaddress.com/ 2.复制如图IP地址 3.文件夹打开C:\Windows\System32\drivers\etc&#xff0c;复制hosts文件&#xff0c;粘贴到桌面 4.在桌面用记事本打开复制过来的hosts 5.在末尾加上一行&#xff0c;IP写刚才复制的 6.复制桌面的hosts,粘贴回C:\Window…

〖程序员的自我修养 - 认知剖析篇⑦〗- 聊一聊在校生所面临的那些问题

人之所以会觉得迷茫,本质上是欠缺对自己的一个控制力、识别庞杂信息、去伪存真的独立思考与认知能力。 说明:该文属于 程序员的自我修养 专栏,购买任意白宝书体系化专栏可加入易编程社区,早鸟价订阅模式除外。福利:加入社区的小伙伴们,除了可以获取博主所有付费专栏的阅读…

【Rust 基础篇】Rust高级函数:函数作为参数与返回值

导言 Rust是一门以安全性、并发性和性能著称的系统级编程语言。在Rust中&#xff0c;函数是一等公民&#xff0c;这意味着函数可以像其他数据类型一样被传递、作为参数传递给其他函数&#xff0c;也可以作为返回值返回。这使得Rust具有强大的高级函数&#xff08;Higher-Order…

eNSP interface g0/0/0 报错解决办法

文章目录 1 报错截图2 解决办法2.1 排查设备是否有 GM 接口2.2 更换适合的路由器&#xff0c;并验证 1 报错截图 2 解决办法 2.1 排查设备是否有 GM 接口 查看下设备是否支持 GM 接口&#xff08;GigabitEthernet&#xff09; 方式一&#xff1a;右键路由器设备 - 设置 - 查看…