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

news2024/10/2 6:43:31

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

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 消费重试和死信队列

 

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

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

相关文章

概率论与数理统计期末小题狂练 11-12两套,12-13-1

11-12第一学期A1 略。2 X服从正态分布N(0,1),X^2服从卡方分布。又考查了卡方分布均值和方差公式。一开始如果对本题无从下手,大概是没看出来是什么分布。3 第二小空本身也可以作为一个结论。4 考查切比雪夫不等式&…

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

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

装修的正确顺序是什么?

装修的正确顺序可以概括为以下几个步骤:1.设计阶段:根据你的需求和预算,设计师会提供多个方案供你选择,确定最终的设计方案。2.拆除阶段:清除室内所有旧的装修材料,包括地板、瓷砖、灯具、门窗等&#xff0…

Windows Server 2016搭建文件服务器

1:进入系统在服务器管理器仪表盘中添加角色和功能。 2:下一步。 3:继续下一步。 4:下一步。 5:勾选Web服务器(IIS) 6:添加功能。 7:下一步。 8:下一步。 9:下一步。 10&a…

视觉SLAM十四讲 ch3 (三维空间刚体运动)笔记

本讲目标 ●理解三维空间的刚体运动描述方式:旋转矩阵、变换矩阵、四元数和欧拉角。 ●学握Eigen库的矩阵、几何模块使用方法。 旋转矩阵、变换矩阵 向量外积 向量外积(又称叉积或向量积)是一种重要的向量运算,它表示两个向量所形成的平行…

2023你还不会稳定性测试?这篇文章彻底讲透了

稳定性对产品的重要性不言而喻。 而作为质量保障,在稳定性测试方面的探索也在不断演化。记得两年前我们做稳定性测试还是基于恒定的压力,7*24小时长时间运行,关注的指标无非是吞吐量TPS的抖动、响应时间的变化趋势,以及各种资源是…

浅浅谈一谈B树和B+树

目录: 🚀1.B树 🚀2.B树 索引背后的数据结构是啥呢,是B树,是为了数据库索引设计的,我们可以先了解B树,再说B树 1.什么是B树 B树也叫B-树,这里的-不读减,是一个符号 我们已经学过了二叉搜素树,B树其实就是N叉搜素树,二叉搜索树只能在每一个结点放一个…

HCIP-5OSPF基本原理及基本配置学习笔记

1、OSPF基本原理 开放式最短路径优先OSPF(Open Shortest Path First)协议是IETF定义的一种基于链路状态的内部网关路由协议。 RIP是一种基于距离矢量算法的路由协议,存在着收敛慢、易产生路由环路、可扩展性差等问题,目前已逐渐被…

C++---最长上升子序列模型---合唱队形(每日一道算法2023.3.1)

注意事项: 本题为"线性dp—最长上升子序列的长度" 和 “最长上升子序列模型—怪盗基德的滑翔翼” 和 “最长上升子序列模型—登山” 的扩展题,所以dp思路这里就不再赘述。 题目: N位同学站成一排,音乐老师要请其中的 (…

【C++】构造函数(初始化列表)、explicit、 Static成员、友元、内部类、匿名对象

构造函数(初始化列表)前提构造函数体赋值初始化列表explicit关键字static成员概念特性(重要)有元友元函数友元类内部类匿名对象构造函数(初始化列表) 前提 前面 六个默认成员对象中我们已经学过什么是构造…

1.4 黑群晖安装:SataPortMap和DiskIdxMap两种获取方式

tinycore及安装工具下载:工具:链接:https://pan.baidu.com/s/1CMLl6waOuW-Ys2gKZx7Jgg?pwdchct提取码:chcttinycore:链接:https://pan.baidu.com/s/19lchzLj-WDXPQu2cEcskBg?pwddcw2 提取码:d…

【博学谷学习记录】超强总结,用心分享丨人工智能 深度学习 神经网络基础知识点总结

目录神经网络激活函数引入激活函数原因:sigmoid激活函数tanh 激活函数ReLU 激活函数(最常用)SoftMax如何选择反向传播参数初始化方法优化方法正则化批量归一层网络模型调优的思路神经网络 简单的神经网络包括三层:输入层&#xf…

CentOS8基础篇10:网络环境配置

管理员为了能够更好的管理和维护网络,需要配置服务器的网络环境,再将服务器部署到网络环境中。为此他需要完成以下工作: 设置临时主机名为Server。 设置网卡信息:IP地址为192.168.137.5,子网掩码是255.255.255.0&#…

Docker 安装GitLab学习笔记

1.环境准备 1.1安装虚拟机 采用Vitualbox7.0安装ubuntu-22.04.1-live-server-amd64 虚拟机网络连接方式:桥接网卡 固定局域网ip:192.168.10.102 1.2.安装Docker 参考:https://www.runoob.com/docker/ubuntu-docker-install.html 采用手动…

Android Button修改背景颜色及实现Button水波纹效果

Android Button修改背景颜色及实现Button水波纹效果,效果如下: 以下基于API33(Android13.0),向下兼容至API24(Android7.0)。 1.修改Button背景 我们可以发现在布局xml文件中直接修改backgroun…

(Trie Tree)字典树

(Trie Tree)字典树 场景:在n个字符串中查找某个字符串。 暴力匹配,时间复杂度为O(nm),m为字符串平均长度,效率过低。 字典查找单词"fly",首先查找’f’,然后…

LeetCode算法复杂度分析(时间复杂度空间复杂度)

文章目录前言时间复杂度1.概述2.大O记法3.常见类型空间复杂度1.概述2.常见类型典型算法的复杂度分析1.递归算法2.哈希表前言 我们知道,研究算法的最终目的就是如何花更少的时间,如何占用更少的内存去完成相同的需求。 时间复杂度 1.概述 我们要计算算…

分享一篇由C语言实现《数据结构》无头无循环单链表

三月,你好,各位csdn uu们好 文章目录前言一、何为单链表二、单链表基本操作(增,删,查,改,销毁,遍历)1.查找与修改、销毁与遍历2.链表插入与删除操作三、单链表 VS 顺序表…

python如何快速采集美~女视频?无反爬

人生苦短 我用python~ 这次康康能给大家整点好看的不~ 环境使用: Python 3.8 Pycharm mou歌浏览器 mou歌驱动 —> 驱动版本要和浏览器版本最相近 <大版本一样, 小版本最相近> 模块使用: requests >>> pip install requests selenium >>> pip …

暑期实习准备——Verilog手撕代码(持续更新中。。。

暑期实习准备——手撕代码牛客刷题笔记Verilog快速入门VL4 移位运算与乘法VL5 位拆分与运算VL6 多功能数据处理器VL8 使用generate…for语句简化代码VL9 使用子模块实现三输入数的大小比较VL11 4位数值比较器电路VL12 4bit超前进位加法器电路VL13 优先编码器电路①Verilog进阶挑…