当前位置: 首页 > news >正文

消息队列原理与实战-学习笔记

消息队列:保存消息的一个容器,本质是个队列,但是需要支持高吞吐、高并发、高可用。

1 前世今生

1.1 业界消息队列对比

  • Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
  • RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
  • Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
  • BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群

2 Kafka

2.1 使用场景

2.2 如何使用

  1. 创建集群
  2. 新建Topic
  3. 编写生产者逻辑
  4. 编写消费者逻辑

2.3 基本概念

  • Topic:逻辑队列,不同Topic可以建立不同的Topic
  • Cluster:物理集群,每个集群中可以建立多个不同的Topic
  • Producer:生产者,负责将业务消息发送到Topic中
  • Consumer:消费者,负责消费Topic中的消息
  • ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉 

2.3.1 Offset

        消息在partition内的相对位置信息,可以理解为唯一ID,在 partition内部严格递增。

2.3.2 Replica

        每个分片有多个 Replica,Leader Replica将会从ISR中选出。

        Follower可以理解为Leader的副本,与Leader差距过大会被踢出

2.4 数据复制

 

2.5 架构

        Zookeeper:负责存储集群元信息,包括分区分配信息等

2.6 一条消息的自述

2.7 Producer

2.7.1 批量发送

2.7.2 数据压缩

 

2.8 Broker

2.8.1 数据的存储

2.8.2 消息文件结构

2.8.3 顺序写

        采用顺序写的方式写入,提高写入效率

2.8.4 偏移量索引文件

        目标寻找offset=28,二分找到小于目标offset的最大文件

2.8.5 时间戳索引文件

        二分找到小于目标时间戳最大的索引位置,再通过寻找offset的方式找到最终数据

2.8.6 零拷贝

 

2.9 Consumer

2.9.1 消息的接收端

 2.9.2 Low-Level

        通过手动进行分配,哪一个 Consumer消费哪一个 Partition完全由业务来决定。

        不能自动容灾,增加Consumer困难

2.9.3 High-Level

2.9.4 Rebalance

 

2.10 数据复制问题

 

2.11 重启操作

 

2.12 替换、扩容、缩容

 

2.13 负载不均衡

迁移Partition3后:

        会造成IO问题

2.14 问题总结

  1. 运维成本高
  2. 对于负载不均衡的场景,解决方案复杂
  3. 没有自己的缓存,完全依赖Page Cache
  4. Controller和Coordinator和Broker 在同一进程中,大量IO会造成其性能下降

3 BMQ

3.1 简介

        兼容Kafka协议,存算分离,云原生消息队列

3.2 HDFS写文件流程

 

4 RocketMQ

4.1 基本概念

 

4.2 RocketMQ架构

 

4.3 存储模型

 

4.4 高级特性

4.4.1 延迟发送

提前编辑→消息队列→定时发送→接收菜单

 4.4.2 消费重试和死信队列

 

相关文章:

消息队列原理与实战-学习笔记

消息队列:保存消息的一个容器,本质是个队列,但是需要支持高吞吐、高并发、高可用。 1 前世今生 1.1 业界消息队列对比 Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色RocketMQ:低延迟、强一致、高性…...

Linux权限相关知识(大量图文展示,及详细操作)

Linux权限相关概念 Linux下有两种用户:一种是超级用户(root)、一种是普通用户。 超级用户:可以在linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情。 超级用户的命令提示符是“#”&#xf…...

Ep_操作系统面试题-什么是协程

协程 是一种 比线程更加轻量级的存 在,一个线程可以拥有多个协程。是一个特殊的 函数 ,这个函数可以在某个地方挂起,并且可以重新在挂起处外继续运行。协程 不是被操作系统内核所管理 , 而完全是由程序所控制(也就是在…...

在C#中使用互斥量解决多线程访问共享资源的冲突问题

在阿里云上对互斥量的概述:互斥量的获取是完全互斥的,即同一时刻,互斥量只能被一个任务获取。而信号量按照起始的计数值的配置,可以存在多个任务获取同一信号量的情况,直到计数值减为0,则后续任务无法再获取…...

JavaEE进阶第六课:SpringBoot配置文件

上篇文章介绍了SpringBoot的创建和使用,这篇文章我们将会介绍SpringBoot配置文件 目录1.配置文件的作用2.配置文件的格式2.1 .properties语法2.1.1.properties的缺点2.2 .yml语法2.2.1优点分析2.2.2配置与读取对象2.2.3配置与读取集合2.2.4补充说明3.设置不同环境的…...

MySQL基础(一)SQL分类、导入、SELECT语句,运算符

目录 MySQL安装以及相关工具 SQL分类 导入数据 最基本的SELECT语句 SELECT FROM 列的别名 去除重复行 着重号 查询常数 描述表结构 过滤数据(重要) 运算符 算数运算符 比较运算符 符号运算符 非符号运算符 逻辑运算符 位运算符 MySQL安…...

反激与正激的区别

之前学习了正激开关电源,但是对于正激和反激一直不是很清楚,网上找了一篇,觉得感觉该可以,以此记录。正激和反激是两种不同的开关电源技术一、正激(1)概述正激式开关电源是指使用正激高频变压器隔离耦合能量…...

王道操作系统课代表 - 考研计算机 第四章 文件管理 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对 操作系统 知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!! 关于对 “文件管理” 章节知识点总结的十分全面,涵括了《操作系统》课程里的全部…...

前端开发规范,你真的了解吗?一起来学习一下前端开发规范,让你的代码高级起来!

代码规范 1 编码风格规范 1.1 使用ES6风格编码源码 定义变量使用let ,定义常量使用const 使用export ,import 模块化 1.2 组件 props 原子化 提供默认值 使用 type 属性校验类型 使用 props 之前先检查该 prop 是否存在 1.3 避免 this.$parent 1.4 谨慎使用 …...

Licode—基于webrtc的SFU/MCU实现

1. webrtc浅析webrtc的前世今生、编译方法、行业应用、最佳实践等技术与产业类的文章在网上卷帙浩繁,重复的内容我不再赘述。对我来讲,webrtc的概念可以有三个角度去解释:(1).一个W3C和IETF制定的标准,约定…...

开发运维工具推荐 --- 解决远程访问局域网服务的问题。开发调试推荐

一、FastNat 可为您解决的问题1. 没公网服务器,需要发布本地的站点或网络程序到公网上,供他人访问;此项功能大大方面开发人员进行远程调试,微信小程序等开发工作进行。2. 需要远程到在其他网络中的设备,但两处的网络不…...

【华为OD机试 】单词倒序(C++ Java JS Python)

文章目录 题目描述输入描述输出描述备注用例题目解析C++ 解法JavaScript算法源码Java算法源码Python解法题目描述 输入单行英文句子,里面包含英文字母,空格以及,.?三种标点符号,请将句子内每个单词进行倒序,并输出倒序后的语句。 输入描述 输入字符串S,S的长度 1 ≤ N…...

PLC 诊断故障的基本原理

(1)东欢坨选煤厂机电设备故障信号主要取自开关量信号,PLC 通过开关量的通和断对设备进行故障诊断。PLC 对开关量的识别是通过输入模块来实现的。PLC 控制设备运行时,设备中的温度、压力、急停、跑偏、速度、过热以及各种按钮和行程开关的传感器与 PLC 输入模块相连接,输入模块的…...

QT打开外部程序并嵌入Qt子窗口的缺点

首先可以参考如下文章: QT打开外部程序并嵌入Qt界面_qt界面嵌入外部应用程序_初学小白Lu的博客-CSDN博客 Qt嵌入外部程序界面初探_qt嵌入其他程序窗口_liming4675的博客-CSDN博客 QT 如何把外部程序嵌入到QT界面_qt嵌入其他程序窗口_hellokandy的博客-CSDN博客 Qt界…...

如何系统地学习 C++ 语言?

C作为具有广泛适用性的编程语言,学习C的人越来越多,但是如何系统地学习C还是个问题,下面我们一起来看一下C学习的方法有哪些吧。 首先,要学习C,最重要的就是掌握C的基础知识。 比如数据结构、算法、微积分等。这些都是…...

【数据结构】单链表

链表1.为什么存在链表2.链表的概念3.单链表的实现4.测试1.为什么存在链表 我们在学习顺序表的时候,了解到顺序表有一定的缺陷:(1)在中间插入数据和删除数据需要挪动数据,时间复杂度是O(N)&…...

Windows 右键菜单扩展容器 [开源]

今天给大家分享一个我做的小工具&#xff0c;可以自定义扩展右键菜单的功能来提高工作效率&#xff0c;效果图如下&#xff1a; 如上图&#xff0c;右键菜单多了几个我自定义的菜单&#xff1a; 复制文件路径 复制文件夹路径 我的工具箱 <走配置文件动态创建子菜单&#x…...

爆文制造机!小红书热榜3个方向,告诉你选题诀窍!

我们知道&#xff0c;不论是达人创作内容&#xff0c;还是品牌制定Brief&#xff0c;都需要提前调研筛选海量信息&#xff0c;这时候如果有一个自己的内容素材库&#xff0c;就省事多啦。按照内容需求&#xff0c;我们可以按3个角度划分小红书内容素材&#xff1a;笔记类型、竞…...

【Web安全社工篇】——水坑攻击

作者名&#xff1a;白昼安全主页面链接&#xff1a; 主页传送门创作初心&#xff1a; 以后赚大钱座右铭&#xff1a; 不要让时代的悲哀成为你的悲哀专研方向&#xff1a; web安全&#xff0c;后渗透技术每日鸡汤&#xff1a;努力赚钱不是因为爱钱“水坑攻击”&#xff0c;黑客攻…...

SpringBoot 整合 MongoDB 实现数据的增删改查!

一、介绍在 MongoDB 中有三个比较重要的名词&#xff1a;数据库、集合、文档&#xff01;数据库&#xff08;Database&#xff09;&#xff1a;和关系型数据库一样&#xff0c;每个数据库中有自己的用户权限&#xff0c;不同的项目组可以使用不同的数据库集合&#xff08;Colle…...

VUE前端常问面试题

文章目录一、VUE前端常问面试题二、文档下载地址一、VUE前端常问面试题 1、MVC和MVVM 区别 MVC&#xff1a;MVC全名是 Model View Controller&#xff0c;即模型-视图-控制器的缩写&#xff0c;一种软件设计典范。 Model(模型)&#xff1a;是用于处理应用程序数据逻辑部分。通…...

c++中map/unordered_map的不同遍历方式以及结构化绑定

文章目录方式一&#xff1a;值传递遍历方式二&#xff1a;引用传递遍历方式三&#xff1a;使用迭代器遍历方式四&#xff1a;结构化绑定(c17特性)结构化绑定示例&#xff08;1&#xff09;元组tuple结构化绑定&#xff08;2&#xff09;结构体结构化绑定&#xff08;3&#xff…...

Kafka系列之:Kraft模式

Kafka系列之:Kraft模式 一、Kraft架构二、Kafka的Kraft集群部署三、初始化集群数据目录四、创建KafkaTopic五、查看Kafka Topic六、创建生产者七、创建消费者一、Kraft架构 Kafka元数据存储在zookeeper中,运行时动态选举controller,由controller进行Kafka集群管理。Kraft模式…...

动态规划:leetcode 139.单词拆分、多重背包问题

leetcode 139.单词拆分leetcode 139.单词拆分给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明&#xff1a;拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1&…...

Stable Diffusion原理详解

Stable Diffusion原理详解 最近AI图像生成异常火爆&#xff0c;听说鹅厂都开始用AI图像生成做前期设定了&#xff0c;小厂更是直接用AI替代了原画师的岗位。这一张张丰富细腻、风格各异、以假乱真的AI生成图像&#xff0c;背后离不开Stable Diffusion算法。 Stable Diffusion…...

webpack高级配置

摇树&#xff08;tree shaking&#xff09; 我主要是想说摇树失败的原因&#xff08;tree shaking 失败的原因&#xff09;&#xff0c;先讲下摇树本身效果 什么是摇树&#xff1f; 举个例子 首先 webpack.config.js配置 const webpack require("webpack");/**…...

jQuery 事件

jQuery 事件 Date: February 28, 2023 Sum: jQuery事件注册、处理、对象 目标&#xff1a; 能够说出4种常见的注册事件 能够说出 on 绑定事件的优势 能够说出 jQuery 事件委派的优点以及方式 能够说出绑定事件与解绑事件 jQuery 事件注册 单个时间注册 语法&#xff1a;…...

【批处理脚本】-2.3-解析地址命令arp

"><--点击返回「批处理BAT从入门到精通」总目录--> 共2页精讲(列举了所有arp的用法,图文并茂,通俗易懂) 目录 1 arp命令解析 1.1 询问当前协议数据,显示当前 ARP 项...

改进 YOLO V5 的密集行人检测算法研究(论文研读)——目标检测

改进 YOLO V5 的密集行人检测算法研究&#xff08;2021.08&#xff09;摘 要&#xff1a;1 YOLO V52 SENet 通道注意力机制3 改进的 YOLO V5 模型3.1 训练数据处理改进3.2 YOLO V5 网络改进3.3 损失函数改进3.3.1 使用 CIoU3.3.2 非极大值抑制改进4 研究方案与结果分析4.1 实验…...

Python - Opencv应用实例之CT图像检测边缘和内部缺陷

Python - Opencv应用实例之CT图像检测边缘和内部缺陷 将传统图像处理处理算法应用于CT图像的边缘检测和缺陷检测,想要实现效果如下: 关于图像处理算法,主要涉及的有:灰度、阈值化、边缘或角点等特征提取、灰度相似度变换,主要偏向于一些2D的几何变换、涉及图像矩阵的一些统…...

电子政务网站建设/指数网站

最近开始学习LDPC&#xff0c;还是刚接触有点生疏&#xff0c;现在主要在看LDPC译码网上有好多LDPC的译码例程&#xff0c;matlab的。我看了大部分都是一个译码函数&#xff0c;有点看不懂。求大家指教问题一&#xff1a;参数f0,f1含义问题二&#xff1a;这个使用的是什么译码方…...

cnetos 做网站服务/官网排名优化方案

文章目录加法运算用加法代替减法移码参考加法运算 用加法代替减法 10-37 和 &#xff08;109&#xff09; 19 &#xff0c;然后 19 mod 127&#xff0c;从而达到减法和加法的效果一样 存储单元为8bit时&#xff0c;计算机作加减运算时&#xff0c;都可以看成 mod 2^8 移码…...

做网上卖酒的网站有几家/seo模拟点击

H参数表示色彩信息&#xff0c;即所处的光谱颜色的位置。该参数用一角度量来表示&#xff0c;红、绿、蓝分别相隔120度。互补色分别相差180度。纯度S为一比例值&#xff0c;范围从0到1&#xff0c;它表示成所选颜色的纯度和该颜色最大的纯度之间的比率。S0时&#xff0c;只有灰…...

wordpress 固定链接结构出错/网络优化器下载

距离矢量&#xff08;Distance Vector&#xff09;说法是因为路由是以矢量&#xff08;距离、方向&#xff09;的方式通告出去的&#xff0c;其中距离是根据度量定义的&#xff0c;方向是根据下一跳路由器定义的。因此&#xff0c;满足距离矢量路由选择协议的条件要有两条&…...

武汉 大型 网站建设/今日足球赛事推荐

在路由文件需要守卫的path后面加上meta {path: /home,component: home,meta:{requireAuth:true}}在main.js里面加上 //路由守卫 router.beforeEach((to, from, next) > {console.log(to);console.log(from);if (to.meta.requireAuth) { // 判断该路由是否需要登录权限if(J…...

个人软件制作网站/站长之家查询网站

在部分的商用虚拟机&#xff08;Sun HotSpot、IBM J9&#xff09;中&#xff0c;Java程序最初是通过解释器&#xff08;Interpreter&#xff09;进行解释执行的&#xff0c;当虚拟机发现某个方法或代码块的运行特别频繁时&#xff0c;就会把这些代码认定为“热点代码”&#xf…...