RabbitMQ
在这里插入图片描述
stock.#.nyse ,#匹配多个字符,*匹配一个字符。
Confirm Callback 到达exchange的回调。
Return Callback 到达queue失败的回调。
Kafka
Kafka生产端
在这里插入图片描述
分区器:
1.直接指定partition 指定0,1。
2.设置hashkey,计算key的hash值进行取模分区。
3.不设置分区键,采用粘性发送,即往某个分区发送至batchSize16K大小后切换分区。

RecordAccumulator(阿q米leite)生产内存池
DQuene每个partition对应一个。
batch.size,默认16k。配合linger.ms 10ms ,就是16k一批次发送,最多延迟10ms。
配合linger.ms默认0ms,不进行延迟,即来一条发一条。
sender 线程默认往每个broker发送5条缓存消息,即没有接受到broker的应答,也能发5条。
broker 采用0 1 -1 的应答策略,
默认-1 等待所有的主从节点全部落盘,才去应答。
0 不需要任何落盘应答,直接确认。
1 主节点落盘就直接确认应答。
若应答失败,则会无限重试。

副本分区策略。
创建一个T topic 三分区。
三节点 A B C
0 0’ 0’
1’ 1 1’
2’ 2’ 2
0为主分区lead 0’为副本

消费端
在这里插入图片描述
enable.auto.commit 默认true ,设置为false ,开启手动ack模式。
fetch.min.bytes 默认1B 设置为 128KB
fetch.max.wait.ms 默认500ms
Max.poll.records 最大拉取批次条数,默认500条,设置为1000条。

每个消费者都会和coordinator保持心跳(默认3s),一旦超时
(session.timeout.ms=45s),该消费者会被移除,并触发再平衡;
或者消费者处理消息的时间过长(max.poll.interval.ms 5分钟),也
会触发再平衡

默认采用Range消费者分区策略
10 P 3 C
先平均分配,多的给第一个
123 10 456 789

earliest与latest的区别
earliest:
新消费者会读取分区中从起始位置到当前最开始偏倚位置的所有消息。
latest:
新消费者会读取分区中从起始位置到当前所有消费者最后位置。

消息幂等
1.首先是生产端发生至kafka broker
PID 每次重启kafka则更换,Partition分区号,SeqNumber 区内顺序号。
<PID, Partition, SeqNumber>
幂等性只能保证的是在单分区单会话内不重复
enable.idempotence 默认为 true
kafka Brocker不接受已经接受的顺序号
2.kafka Brocker发送至 消费者端
kafka在同一消费者组,只会把同一分区的消息发送至一个消费者实例,但是由于消费者组一个实例宕机,触发再平衡机制,可能会重新发送消息至消费者端,故消费者端也需要根据主键幂等判断。
消息顺序
只能保证单分区顺序性。
broker接受到乱序的消息之后,会等待顺序的消息,并且进行重新排序。比如Brocker 接受到1 2 4,会等到接受到3之后排好序后落盘。
max.in.flight.requests.per.connection 需要设置小于等于5 默认配置就是5
enable.idempotence 默认为 true
文件存储机制
在这里插入图片描述
每个Segment 1 G 大小,每4KB存储一条索引,指定offset查询时,先查找索引的两端范围,再去查询log文件位置。
默认7天过期、以每个Segment 最大的消息时间判断是否过期,5分钟检查一次。
改为30天,30分钟检查一次,甚至对于重要消息,可以设置永不过期,在根据消费到的offset,进行手动消费。

Kafka为什么快
1.
零拷贝
减少了两次内核态和用户态的文件传输。
在这里插入图片描述
2.顺序磁盘写,减少磁头寻址时间。
3.采用LZ4,Gzip等压缩算法,减少包大小。
4.分区并行。

本地消息表
msgid(全消息唯一id)
topic(stock.relase)
status(状态 1.未消费2.已消费3.异常重试4.错误5.已存在)
erromsg错误消息内容
e_count(异常重试次数)
e_threshold(错误消息阈值)
group_flag(是否是顺序消息)
groupid(顺序消息组号)
grouporder(顺序消息组内顺序号)
发送时间
消费时间
无论如何都进行,确认的ack,不然像kafka这种,uack跳过某一条消息,之后有确认了后续的消息,offset直接就移动到了ack的位置,相当于错误的那条消息丢了,很严重的。
接受消息时都去判断,msgid是否存在,若存在,则不消费逻辑,直接已存在。若不存在,正常消费,处理完成之后标记为已消费。
若出现了异常(db超市,远程调用异常等),标记为异常重试。
后台定时任务,每隔5分钟,走索引扫描异常重试的消息,二次发送至mq。
当异常重试次数达到设定的错误阈值2次时,直接标记改消息错误,记录异常。(此时大概率是代码逻辑的健壮性不够导致的,比如非法的参数长度,sql进不去,或者是数组越界,或者入参没校验空值,出了空指针)重试再多次都不行。有个错误消息的前端页面,可以直接观测到。
顺序消息,通过是否是顺序消息、消息组号和组内顺序号去确认,当前的消息是否应该被消费,若是第二条,则查询库中第一条的消费状态,若不存在或者异常为消费,则直接入库,等待第一条消息消费完,查询后一条的是否存在进行消费。
当然,本地消费表只针对业务型mq。像rocketmq或者kafka有自己的策略。而且数据的并发肯定更不上mq的上限。

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

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

相关文章

飞算科技:以原创技术赋能数字转型

在数字科技迅猛发展的浪潮中&#xff0c;飞算数智科技&#xff08;深圳&#xff09;有限公司&#xff08;简称 “飞算科技”&#xff09;作为一家自主创新型的数字科技公司&#xff0c;同时也是国家级高新技术企业&#xff0c;正以扎实的技术实力和丰富的实践经验&#xff0c;在…

基于 Rust 的Actix Web 框架的应用与优化实例

基于 Rust 的Actix Web 框架的应用与优化实例 Actix Web 框架概述 Actix Web 是一个基于 Rust 的高性能、轻量级 Web 框架,构建于 Actix 异步运行时之上。它支持异步编程模型,适合构建高并发、低延迟的 Web 服务和 API。 核心特性 异步支持:基于 async/await 语法,充分利…

springMVC01-特点、创建项目、@RequestMapping、获取参数请求,三种域对象

一、简介 SpringMVC 就是 Spring 框架中的 MVC 模块&#xff0c;用于构建 Web 应用中的“控制层”。 SpringMVC 是 Spring 提供的一个基于 Servlet 的 Web MVC 框架模块&#xff0c;是 Spring 整个体系中的“Web 层核心”。 SpringMVC 是 Spring 的一部分&#xff0c;Spring…

Java基础,反射破坏封装性 - 单例模式的崩塌

目录一、容易出现问题的小李代码小李的单例设计看似完美&#xff0c;实则存在三个致命问题&#xff1a;1、反射攻击的天然漏洞2、序列化的隐患3、性能瓶颈二、隔壁老王的优化方案三、为什么这样优化&#xff1f;四、小结周五下午&#xff0c;代码审查会议上&#xff0c;小李自信…

Neo4j 综合练习作业

Neo4j 综合练习作业 作业说明 这个作业涵盖了 Neo4j 的多个重要知识点&#xff0c;包括节点和关系的创建、查询、更新、删除以及高级查询功能。请使用 Cypher 语句完成以下所有题目。 数据准备 首先执行以下语句创建示例数据&#xff1a; ACTED_IN: 表示出演关系 DIRECTED: 表示…

基于PA算法的FTL引导

一、抽象绑定关系 1. 什么是 AF Block,什么是 NF Block,为什么要将多个 NF Block 绑定为一个 AF Block AF Block(Allocation Flash Block) 和 NF Block(NAND Flash Block) 是在 NAND Flash 存储架构中用于管理数据的基本单位。 AF Block 定义:AF Block 是一组多个 NF…

快速入门Java中的IO操作

以下是 Java 中常用的 IO 知识点总结&#xff1a; 1. 流的分类 按数据流向&#xff1a;输入流&#xff08;读取数据&#xff09;和输出流&#xff08;写入数据&#xff09;。按数据类型&#xff1a;字节流&#xff08;处理二进制数据&#xff0c;以字节为单位&#xff09;和字符…

小程序软装: 组件库开发

本节概述 经过前面小节的学习&#xff0c;我们已经搭建起了小程序的编译构建环境&#xff0c;能够将我们开发的小程序项目编译成为对应的逻辑代码文件 logic.js&#xff0c;页面渲染文件 view.js&#xff0c;样式文件 style.css 和配置文件 config.json 在编译小程序的过程中…

250708-Debian系统安装Edge浏览器并配置最小中文输入法

在 Debian 系统上安装 Microsoft Edge 浏览器可以通过以下几种方式进行。Microsoft 官方提供了 .deb 安装包&#xff0c;适用于 Debian、Ubuntu 及其衍生系统。 A. 如何安装&#xff1f; ✅ 方法一&#xff1a;使用 .deb 安装包&#xff08;推荐&#xff09; 步骤 1&#xff…

docker所占硬盘内存指令

使用下面命令可以查看docker所占的硬盘大小&#xff0c;如&#xff1a;docker system dfdocker system df -v

A1126LLHLX-T Allegro霍尔效应锁存器,5kHz+推挽输出,汽车级转速检测专家!

A1126LLHLX-T&#xff08;Allegro&#xff09;产品解析一、产品定位A1126LLHLX-T是Allegro MicroSystems推出的全极性霍尔效应锁存器&#xff0c;采用超薄SOT-23W封装&#xff08;1mm厚度&#xff09;&#xff0c;专为高可靠性位置检测与转速测量设计&#xff0c;具有低功耗、高…

【C#】File从后往前读取文件指定行数

/// <summary>/// 从后往前读取文件最后行数据/// </summary>/// <param name"filePath"></param>/// <param name"count"></param>/// <returns></returns>public static List<string> ReadFileRe…

暑假算法日记第五天

目标​&#xff1a;刷完灵神专题训练算法题单 阶段目标&#x1f4cc;&#xff1a;【算法题单】滑动窗口与双指针 LeetCode题目:683. K 个关闭的灯泡2067. 等计数子串的数量2524. 子数组的最大频率分数2269. 找到一个数字的 K 美丽值1984. 学生分数的最小差值1461. 检查一个字符…

【05】MFC入门到精通——MFC 为对话框中的控件添加变量 和 数据交换和检验

文章目录四、 为对话框中的控件添加变量五、对话框类的5.1 为编辑框添加变量面步骤中 为对话框添加了几个控件&#xff0c;包括三个静态文本框&#xff0c;三个编辑框&#xff0c;一个按钮控件。 四、 为对话框中的控件添加变量 编辑框中的数据可能会经常变化&#xff0c;有必…

4-Kafka-partition(分区)概念

Kafka Topic 分区详解 &#x1f4cc; 一、分区核心概念 1. 什么是分区&#xff1f; 物理分片&#xff1a;Topic 被划分为多个分区&#xff08;Partition&#xff09;&#xff0c;每个分区是一个有序、不可变的消息序列存储单位&#xff1a;每个分区对应一个物理日志文件&…

论文略读:UniPELT: A Unified Framework for Parameter-Efficient Language Model Tuning

ACL 2021 LoRAPrefix TuningAdapter门控蓝色参数是可训练的参数

【论文阅读】CogView: Mastering Text-to-Image Generation via Transformers

CogView&#xff1a;通过Transformers实现文本到图像的生成简介目标&#xff1a;通用领域中的文本到图像生成一直是一个开放的问题&#xff0c;它既需要强大的生成模型&#xff0c;也需要跨模态的理解。为了解决这个问题&#xff0c;我们提出了CogView&#xff0c;一个具有VQ -…

Typecho与WordPress技术架构深度对比:从LAMP到轻量级设计

文章目录 Typecho vs WordPress:深入比较两大博客系统的优劣与选型指南引言1. 系统概述与技术架构1.1 WordPress架构分析1.2 Typecho架构特点2. 核心功能对比2.1 内容管理能力2.2 主题与模板系统3. 性能与扩展性对比3.1 系统性能基准测试3.2 扩展生态系统4. 安全性与维护成本4…

CSS揭秘:8.连续的图像边框

前置知识&#xff1a;CSS 渐变&#xff0c;5. 条纹背景&#xff0c;border-image&#xff0c;基本的 CSS 动画前言 本文旨在实现图片边框效果&#xff0c;即在特定场景下让图片显示在边框而非背景区域。 一、传统实现方案 正常我们面对这样一个需求时&#xff0c;下意识会想到的…

Linux驱动学习day20(pinctrl子系统驱动大全)

一、Pinctrl作用Pinctrl(Pin Controller)&#xff1a;控制引脚引脚的枚举与命名、引脚复用、引脚配置。Pinctrl驱动一般由芯片原厂的BSP工程师来写&#xff0c;一般驱动工程师只需要在设备树中指明使用哪个引脚&#xff0c;复用为哪个功能、配置为哪些状态。二、Pin Controller…