Kafka的三高设计原理
1.生产者缓存机制--高性能
生产者缓存机制的主要目的是将消息打包,减少网络IO频率
kafka生产者端存在消息累加器RecordAccumulator,它会对每个Partition维护一个双端队列,队列中消息到达一定数量后 或者 到达一定时间后,通过sender线程批量的将消息发送给kafka服务端。(批量发送)
2.发送应答机制--高可用
发送应发机制保证了消息可以安全到达服务端!
Producer端一个不太起眼的属性ACKS_CONFIG:
- acks = 0,生产者不关心broker的应答;不安全,但是速度快
- acks = all or -1,生产者需要所有partition的应答;最安全,但是效率低一些
- acks = 1,生产者只需要Leader partition的应答;中和
3.生产者消息幂等性--高可用
防止消息重复发送到服务端Broker
(解决了单分区发送的问题)
每个Producer发送消息到Broker的时候,会携带<PID,SN>给Broker,PID是该Producer的唯一标识,SN是消息序号。Broker端会维护这个SN的序列号。如果发送端SN<=服务端SN,则重复应答即可;如果发送端SN>服务端SN,则说明发送的消息有丢失!如果发送端SN=服务端SN+1,则正常接收消息。
(多分区发送的幂等性问题需要事务机制来保证)
4.Controller Broker和Leader Partition--高可用
监控作用
基于Zookeeper的Controller选举机制,Controller Broker管理所有Broker的健康状态;
Leader Partition管理该Topic下的所有partition;
当一个broker中存在多个Leader partition的时候,会触发Leader partition的自平衡机制,涉及到大量消息的转移和同步。
5.Partition的故障恢复机制--高可用
保证各partition的数据一致性
- LEO(Log End Offset): 每个Partition的最后一个Offset
- HW(High Watermark): 一组Partiton中最小的LEO
当follower partition故障时,该Follower节点会读取本地记录的上一次的HW,将自己的日志中高于HW的部分信息全部删除掉,然后从HW开始,向Leader进行消息同步。
当Leader partition故障时,会选举出新的Leader partition,其他Follower会将各自的Log文件中高于HW的部分全部清理掉,然后从新的Leader中同步数据。
如果follower partition的HW不一致,那kafka通过epoch机制来进行数据同步。
(每个Leader Partition在上任之初,都会新增一个新的Epoch记录。这个记录包含更新后的epoch版本号,以及当前Leader Partition写入的第一个消息的偏移量。接下来其他Follower Partition要更新数据时,就可以不再依靠自己记录的HW值判断拉取消息的起点,而是根据这个最新的epoch条目来同步)
6.消息存储--高性能
三个日志文件存储kafka的消息,.log存储实际消息,.index以偏移量为索引,.timeindex以时间戳为索引
.log只可以进行消息顺序写的追加,不支持修改和删除!顺序写的效率很高!
.index类似于跳表!<offset,pos>,跳表的查询效率高,redis也用到跳表!
7.零拷贝--高性能
producer发送给broker的消息通过mmap持久化到磁盘;
consumer通过sendfile方式拉取broker的消息;
8.消费者防止消息重新消费--高性能
1)消费者通过订单的id去查看该消息是否已被消费过(消息如果被消费了,则该id已存在)
2)通过redis维持offset,消费时将消息的offset与redis中的offset进行比较
9.kafka消息零丢失方案--高可用
- 生产者发送消息到broker不丢失:acks = -1或者all;或者1。
- broker保证消息不丢失:1)配置多备份因子;2)合理刷盘频率
- 消费者防止异步处理丢失消息:手动提交offset更安全一些
10.消息积压问题--高可用
- 如果业务正常,只是因为消费者消费太慢,则增加partition数量,增加消费者数量即可。
- 发送消息时,尽量保证消息在各个Partition分布均匀;
- 如果业务异常,则降级处理,人工介入分析该问题。
相关文章:
Kafka的三高设计原理
1.生产者缓存机制--高性能 生产者缓存机制的主要目的是将消息打包,减少网络IO频率 kafka生产者端存在消息累加器RecordAccumulator,它会对每个Partition维护一个双端队列,队列中消息到达一定数量后 或者 到达一定时间后,通过sen…...
生信圆桌x生信宝库:生物信息学资源与工具的终极指南
介绍 生物信息学作为现代生物科学的重要分支,涉及到大量的数据处理、分析和存储工作。随着领域的不断发展,各类生物信息学资源与工具也如雨后春笋般涌现。这些资源涵盖了从基因组数据、蛋白质结构到代谢路径的方方面面,极大地丰富了科研人员的…...
centos7 install rocketmq 宿主机快速搭建RocketMQ单机开发环境_centos7 单机部署rocketmq命令
2214 Jps 2071 BrokerStartup 1947 NamesrvStartup ### 第四步:发送消息测试消费着启动export NAMESRV_ADDRlocalhost:9876 ./tools.sh org.apache.rocketmq.example.quickstart.Consumer 发送测试消息export NAMESRV_ADDRlocalhost:9876 ./tools.sh org.apache.roc…...
2024高教社杯全国大学生数学建模竞赛(A题)深度剖析 _ 建模完整过程+详细思路+代码全解析
问题1解答过程 1.1 螺线运动的基本几何模型 板凳龙的舞动路径为等距螺线。螺线是极坐标中一类常见曲线,其特点是半径随角度线性增加。我们可以用以下极坐标方程描述这条螺线: r ( θ ) p 2 π θ r(\theta) \frac{p}{2\pi} \theta r(θ)2πpθ 其…...
What is Approximation Ratio?
Approximation Ratio 近似比率是用来衡量一个算法找到的近似解与最优解之间的差距的一个量化指标. 假设有一个优化问题,其最优解的值是OPT,用时间T,而我们的算法得到的解的值是ALG,用时间t。如果算法有一个2的近似比率,那么我们…...
探索Unity与C#的无限潜能:从新手到高手的编程之旅
在数字创意与技术创新交织的今天,Unity游戏引擎凭借其强大的跨平台能力和灵活的编程接口,成为了无数开发者心中的首选。而C#,作为Unity的官方脚本语言,更是以其面向对象的特性和丰富的库支持,为游戏开发注入了无限可能…...
初始MYSQL数据库(2)——创建、查询、更新、删除数据表的相关操作
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: MYSQL 前面我们学习了创建、删除数据库以及创建、查看、删除数据表的相关操作。 我们知道数据库中所存储的数据其实就是数据表中一条一条的记…...
OpenCV直方图计算
#include <opencv2/opencv.hpp> #include <vector>using namespace cv; using namespace std;int main() {cout << "直方图calcHist" << endl;Mat src imread("left.png", IMREAD_GRAYSCALE);if (src.empty()){cout << &qu…...
多线程篇(并发相关类- 原子操作类)(持续更新迭代)
目录 前言 一、原子变量操作类(AtomicLong为例) 1. 前言 2. 实例 二、JDK 8新增的原子操作类LongAdder 三、LongAccumulator类原理探究 前言 JUC包提供了一系列的原子性操作类,这些类都是使用非阻塞算法CAS实现的,相比使用…...
数学建模常用工具总结
数学建模常用工具总结 绘图篇pythonMATLABLIVEGAP CHARTSApache EChartsBioLadderHiplot Pro 生物医学可视化平台Graph EditorRAWGraphs 2.0ExcalidrawPPT绘图 配色篇Color SpaceAdobe Color 素材篇手绘素材插画网iconfont-阿里巴巴矢量图标库下面四个都是实物风格的素材&#…...
【Redis】为什么选择 Redis 做缓存?
近期文章: 【Redis】Redis 底层的数据结构(结合源码) 【MySQL】索引底层的数据结构 BTree 在系统开发中,我们经常会使用 Redis 作为缓存系统,但你知道为什么要使用缓存吗?为什么是使用 Redis 作为缓存呢&…...
Flutter 开发常用第三方库总结
Flutter 开发常用第三方库总结 常用库 常用库 屏幕适配flutter_screenutil加载 svg flutter_svg状态管理 flutter_bloc(bloc、equatable)、provider视频播放器chewie图片缓存cached_network_image网络请求 dio设备信息查询device_info_plus文件路径 pat…...
OpenCV中的颜色映射函数applyColorMap的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 OpenCV 中应用类似于 GNU Octave 或 MATLAB 中的颜色映射,虽然 OpenCV 中的颜色映射类型与 GNU Octave 或 MATLAB 中的颜色映射类型名…...
Ubuntu22.04安装colmap
首先上这里查看自己电脑GPU的CMAKE_CUDA_ARCHITECTURES 终端输入以下内容安装预先的前置依赖 sudo apt-get install \git cmake ninja-build build-essential \libboost-program-options-dev libboost-filesystem-dev \libboost-graph-dev libboost-system-dev libboost-tes…...
认识GO语言中的nil,零值与空结构体
go语言的初学者,特别是java开发者新学习go语言,对于一些和java类似但是又有差异的概念很容易混淆,比如说go中的零值,nil 和 空结构体。本文就来详细探讨一下go中这些特殊概念的含义和实际场景中的应用: 零值 零值&…...
Node.js sqlite3:Statement对象详解
在Node.js的sqlite3库中,Statement对象是一个非常重要的概念。它代表了一个预编译的SQL语句,可以多次执行以提高性能。通过使用Statement对象,你可以避免重复解析和编译SQL语句的开销,特别是在需要频繁执行相同SQL语句的情况下。本…...
ELK学习笔记——如何给Kibana新增用户和角色
Kibana新增用户和角色 首先用超管账号登录上Kibana,按照下面步骤操作 1、创建角色 按图操作 2、创建用户 按图操作 3、给用户分配角色 至此,角色和用户绑定成功; 最后,可以退出管理员账号,登录这个新…...
Minikube Install Kubernetes v1.18.1
文章目录 简介安装工具配置代理运行集群检查集群加入rancher 简介 模拟客户环境,测试 kubernetes v1.18.x 是否可以被 rancher v2.9.1 纳管。 安装工具 docker 安装Install and Set Up kubectl on Linux 安装 minikube 配置代理 docker proxylinux proxy 运行…...
重修设计模式-创建型-工厂模式
重修设计模式-创建型-工厂模式 一、概述 工厂模式(Factory Pattern)是设计模式中非常基础且常用的一种模式,主要目的是通过封装对象的创建过程,从而实现代码的解耦和灵活性的提升。 工厂模式的核心思想 封装对象的创建&#x…...
使用Cskin时候 遇到按钮有默认阴影问题解决
使用Cskin时候 遇到按钮有默认阴影 设置 DrawType 属性就可以了...
Qwen3-TTS开源大模型实操:批量处理CSV文本并生成多语种MP3音频的Python脚本
Qwen3-TTS开源大模型实操:批量处理CSV文本并生成多语种MP3音频的Python脚本 1. 为什么你需要这个脚本:从手动点选到全自动批量合成 你有没有试过用Qwen3-TTS WebUI生成几十条产品介绍语音?每次打开页面、粘贴文本、选语言、点生成、等加载、…...
leetcode 1624. 两个相同字符之间的最长子字符串-耗时100
Problem: 1624. 两个相同字符之间的最长子字符串 耗时100%,双指针,找到相同的以后直接break以及拿到最大值 Code class Solution { public:int maxLengthBetweenEqualCharacters(string s) {int n s.size(), mx -1;char ch;for(int i 0; i < n; i…...
别再只做温度计了!用STM32玩点高级的:双INMP441麦克风阵列的时延测量与声源指向
从零构建STM32双麦克风声源定位系统:I2S协议、PHAT算法与舵机控制实战 在嵌入式音频处理领域,声源定位一直是个既有趣又充满挑战的方向。想象一下,当你拍手时,一个小型装置能立即转向声源方向——这种看似简单的互动背后…...
告别重复造轮子:用快马平台生成mpu6050优化算法库,开发效率提升数倍
告别重复造轮子:用快马平台生成mpu6050优化算法库,开发效率提升数倍 在嵌入式开发中,MPU6050这款六轴传感器几乎成了运动控制和姿态检测的标配。但每次新项目都要从头写驱动、调滤波算法、实现姿态解算,这种重复劳动实在太低效了…...
Pixel Epic智识终端实战教程:从安装到生成首份研报的完整操作流程
Pixel Epic智识终端实战教程:从安装到生成首份研报的完整操作流程 1. 认识你的像素冒险装备 Pixel Epic智识终端是一款将研究报告生成过程游戏化的AI工具。想象你是一位勇者,而AI是你的贤者顾问,你们将一起在知识的像素大陆上冒险。 核心特…...
紧急预警:C++27 std::filesystem::copy_options::recursive_nowait 已被证实引发静默截断!附官方补丁+3行兼容封装方案(2025 Q2前必读)
第一章:C27 文件系统库扩展应用C27 标准对 <filesystem> 库进行了实质性增强,新增了异步路径遍历、符号链接元数据深度解析、跨设备硬链接原子创建以及基于策略的路径规范化接口。这些特性显著提升了在复杂存储拓扑(如容器挂载点、分布…...
Super Qwen Voice World生产环境部署:Docker镜像构建与GPU透传配置
Super Qwen Voice World生产环境部署:Docker镜像构建与GPU透传配置 1. 引言 想象一下,你开发了一个超酷的复古像素风语音设计工具,用户只需要输入文字和语气描述,就能生成各种情绪饱满的AI配音。这个工具在本地测试时运行完美&a…...
3步打造安静工作站:ThinkPad散热控制新方案
3步打造安静工作站:ThinkPad散热控制新方案 【免费下载链接】TPFanCtrl2 ThinkPad Fan Control 2 (Dual Fan) for Windows 10 and 11 项目地址: https://gitcode.com/gh_mirrors/tp/TPFanCtrl2 解决ThinkPad风扇噪音的终极武器 每一位ThinkPad用户都曾经历过…...
CANoe实战指南:从UDS诊断到ECU刷写,手把手构建车载测试台架
1. CANoe测试台架搭建基础 第一次接触车载测试的朋友可能会被各种专业术语吓到,但其实用CANoe搭建测试环境就像组装乐高积木一样有趣。我刚开始做ECU测试时,最头疼的就是如何把硬件设备和软件配置对应起来。后来发现只要掌握几个关键点,半小时…...
GLM-4.1V-9B-Base惊艳输出:对‘抽象艺术画’的风格、情绪、创作意图推测
GLM-4.1V-9B-Base惊艳输出:对抽象艺术画的风格、情绪、创作意图推测 1. 视觉理解模型的新突破 GLM-4.1V-9B-Base作为智谱开源的视觉多模态理解模型,在艺术领域展现出令人惊艳的分析能力。不同于传统图像识别工具,这款模型能够深入解读抽象艺…...
