深入解析:Kafa面试经典题--Kafka为什么吞吐量大,速度快

news/2025/9/19 9:35:05/文章来源:https://www.cnblogs.com/wzzkaifa/p/19100139

这是一个非常核心的面试题和技术问题。Kafka 的高吞吐量和速度并非来自某一项“银弹”科技,而是其架构设计中一系列精巧决策共同作用的结果。

一、核心思想:最大化利用底层硬件资源

Kafka 速度快的根本原因是,它的设计哲学是“尽可能地避免不必要的开销,并将硬件(尤其是磁盘和网络)的性能压榨到极致”

这听起来简单,但绝大多数系统之所以慢,就是源于违反了这些原则。Kafka 通过以下设计完美践行了这一哲学。

二、六大核心设计原理

1. 顺序读写 (Sequential I/O) - 击败随机读写

常见误解:“Kafka 用磁盘存储数据,磁盘IO慢,所以 Kafka 慢。”

现实:磁盘(无论是 HDD 还是 SSD)的顺序读写性能远远高于随机读写(可能差出千倍以上)。Kafka 的消息是追加(Append)写入日志资料的,这是一个纯粹的顺序写操控。消费消息时,也是依据偏移量(Offset)进行顺序读。

类比:这就像用磁带录音(顺序写)和用唱片机找某首歌里的某一秒(随机读)。前者虽然不能随机跳转,但持续写入的速度极快。

2. 页缓存 (Page Cache) - 击败内存缓存
  • 传统做法:很多平台会在用户空间维护一个内存缓存(Heap),数据先写入这里,再刷到磁盘。这会导致双缓存问题:资料在 OS 的 Page Cache 和应用缓存中存了两份,并且伴随着频繁的 GC 和对象创建开销。

  • Kafka 的做法:Kafka 直接利用操作系统的页缓存(Page Cache)在直接与内存(Page Cache)进行高速交互。就是来缓存数据。生产者写入和消费者读取消息,大部分都

    • 写操作:材料直接写入 Page Cache,由操作系统决定何时异步刷盘。这非常快。

    • 读操作:如果消费者消费的是“热数据”(刚刚写入或常读),材料极大概率还在 Page Cache 中,相当于直接从内存读取,速度极快。

  • 好处零拷贝的基础、避免了 JVM GC overhead、充分利用 OS 高效的内存管理。

3. 零拷贝 (Zero-Copy) - 击败内核态切换

这是 Kafka 在消费端加速的杀手锏。

传统的资料发送流程(从磁盘文档到网络 socket)非常低效:

  1. 操作系统从磁盘读取数据到内核空间的页缓存。(拷贝)

  2. 应用程序将素材从内核空间拷贝到用户空间的缓冲区。(上下文切换

  3. 应用程序将数据从用户空间缓冲区拷贝到内核空间的 socket 缓冲区。(上下文切换

  4. 最后,socket 缓冲区的数据被发送到网卡。(拷贝)

该过程涉及4 次上下文切换4 次数据拷贝

具体的流程如下:

步骤操作上下文切换数据拷贝执行者
1read() 系统调用第1次(usr -> kernel)-CPU
2磁盘 -> 内核缓冲区-第1次DMA
3内核缓冲区 -> 用户缓冲区-第2次CPU
4read() 返回第2次(kernel -> usr)-CPU
5write() 系统调用第3次(usr -> kernel)-CPU
6用户缓冲区 -> Socket缓冲区-第3次

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

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

相关文章

第2章 zynq开发板FSBL的生成和NAND烧录

前言 由于本人较懒,记录主要是过程,由于zynq的比stm32做的人少很多,资料也少很多,我会简要介绍原理,操作流程主要由图片加少量文字组成,每一章都是在之前的章节基础上做的一、新建FSBL工程 打开vivado,打开SDK打…

工具大全

<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/&…

RocketMQ vs kafka

目录背景和价值1. 更激进的“零拷贝”技术2. 更简洁的存储模型3. 更“粗糙”但高效的批处理4. 权衡取舍的可靠性保证对比总结参考资料 背景和价值 你这个问题非常好,直击了两者设计哲学的核心差异。 简单来说,Kafka …

JL-32 土壤速测仪 手持便携 大容量 多参数可同时监测

JL-32 土壤速测仪 手持便携 大容量 多参数可同时监测产品概述 土壤速测仪是一款携带方便,操作简单,集采集与存储于一体的可移动式观测仪器。由手持式速测主机、土壤类传感器、USB数据线、电源适配器、便携式手提箱等…

el-date-picker时间选择器限制时间跨度为3天 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Android--资料

Android--资料 Android Studio 的 10 个使用技巧 Android中的Radio模糊查询AutoCompleteTextView简单使用 Android基础入门:搜索框组件SearchView Android studio设置jdk版本项目设置和全局设置 三种实现…

直播录制神器!一款多平台直播流自动录制客户端!

StreamCap —— 一个基于 FFmpeg 和 StreamGet 的多平台直播流录制客户端,覆盖 40+ 国内外主流直播平台,支持批量录制、循环监控、定时监控和自动转码等功能。大家好,我是 Java陈序员。 现如今,观看直播已成为日常…

101.计组--二章

101.计组--二章数据的表示和运算 "自六月份另一个学校毕业 已经有拖三个多月的计组学习 当时其实已经已有一些学习 仅仅差了一节内容结束 也确实因为这个复杂的运算各类东西 言归正传 新的学校 新的学习 开始总结…

LobeChat搭建

docker search lobe-chat docker pull lobehub/lobe-chat docker run -d -p 3210:3210 -e ACCESS_CODE=lobe66 --name lobe-chat lobehub/lobe-chat本文来自博客园,作者:潇汀,转载请注明原文链接:https://www.cn…

推荐几家国外的AI模型应用网站

一、聊天 1、OpenAI——ChatGPT 网址:https://chatgpt.com/ 简介:OpenAI 开发的对话式AI模型,擅长自然语言处理,能回答问题、创作内容和提供学习支持。 实际体验: 对话聊天式AI的引领者,综合能力很强,从发布至今…

【maven01】依赖管理的工具 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

长园智能装备遇上利驰SuperHarness-3D,实现充电桩线束设计效率与精度双提升!

利驰数字线束软件,赋能长园智能装备充电桩线束智造。设计案例:​感谢南瑞、盛弘、长园等众多充电桩龙头企业,选择利驰数字线束[抱拳][抱拳][抱拳]

学习笔记:操作分块 / 根号重构

感谢校内模拟赛给我强行灌输了这个东西。。。 概述 操作分块 / 根号重构,又名时间轴分块,可以解决需要多次修改和查询的问题,常常难以直接维护。 借鉴序列分块的思想,我们设定一个阈值 \(B\),将连续 \(B\) 次操作…

url测试脚本2

!/bin/sh . /etc/init.d/functions 待检测的 URL 列表 array=( "http://blog.oldboyedu.com" "http://blog.etiantian.org" "http://oldboy.blog.51cto.com" "http://10.0.0.7&quo…

运动控制教学——5分钟学会机器人运动学! - 实践

运动控制教学——5分钟学会机器人运动学! - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

url测试脚本3

!/bin/sh . /etc/init.d/functions 待检测的 URL 列表 array=( "http://mail.163.com" "http://mail.sina.com/" ) 等待效果,输出进度 wait_for_start() { echo -n "Start Curl_check"…

深入解析:linux基本知识

深入解析:linux基本知识pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

解决方案架构师是做什么

解决方案架构师 面试题 客户是怎么管理的 渠道变革变换的是哪些内容。变的是什么? 分层分级是怎么设计,价格体系是怎么制定的 marking 是怎么做的? CAP模型,是怎么管理的, 营销活动和销售是如何结合的,IT解决方案…

鸿蒙应用开发从入门到实战(九):ArkTS渲染控制

ArkTS拓展了TypeScript,可以结合ArkUI进行渲染控制,是的界面设计具有可编程性。本文简要描述鸿蒙应用开发中的条件渲染和循环渲染。大家好,我是潘Sir,持续分享IT技术,帮你少走弯路。《鸿蒙应用开发从入门到项目实…

C# 2025年6-9月TIOBE排名增长及未来展望

根据 TIOBE 编程语言排行榜 2025 年 6 月至 9 月的公开数据,C# 的排名和市场份额变化如下(综合多个月份数据整理):一、 C# 在 2025 年 TIOBE 排行榜的连续增长趋势2025 年 6 月排名:第 5 位市场份额:4.69%2025 年…