字节一面:kafka为什么这么快?

Kafka为什么吞吐量大、速度快? 本文参考:http://searene.me/2017/07/09/Why-is-Kafka-so-fast/ https://queue.acm.org/detail.cfm?id=1563874 Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。 Kafka... 阅读详情

👉 这是一个或许对你有用的社群

🐱 一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料: 

47069573c0d3b0741f071c805fd82d63.gif

👉这是一个或许对你有用的开源项目

国产 Star 破 10w+ 的开源项目,前端包括管理后台 + 微信小程序,后端支持单体和微服务架构。

功能涵盖 RBAC 权限、SaaS 多租户、数据权限、商城、支付、工作流、大屏报表、微信公众号、ERP、CRM、AI 大模型等等功能:

  • Boot 多模块架构:https://gitee.com/zhijiantianya/ruoyi-vue-pro

  • Cloud 微服务架构:https://gitee.com/zhijiantianya/yudao-cloud

  • 视频教程:https://doc.iocoder.cn

【国内首批】支持 JDK 17/21 + SpringBoot 3.3、JDK 8/11 + Spring Boot 2.7 双版本 

来源:捡田螺的小男孩


前言

有位粉丝去字节面试。问了一道很经典的八股文:kafka为什么这么快 ?

其实这不就送分题嘛,哈哈~~ 我梳理了田螺版的答案:

  • 批量处理思想

  • 磁盘顺序读写

  • 零拷贝技术

  • 页缓存加速消息读写

  • 分区与并行处理

  • 数据压缩

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

1. 批量处理思想

之前写SQL优化技巧的时候,就提到批量更新SQL ~~

假如你需要搬一万块砖到楼顶,你有一个电梯,电梯一次可以放适量的砖(最多放500),你可以选择一次运送一块砖,也可以一次运送500,你觉得哪个时间消耗大 ?

9a1e97df0d33ae2b5b79fcb850f57ff9.png

kafka为什么这么快,就是使用了批量操作 思想。

Kafka支持批量发送和接收消息 。生产者可以将多个消息打包成一个批次发送 ,消费者也可以一次性获取多个消息进行处理 。这样可以减少网络开销和磁盘I/O次数,提高性能。

  • Kafka生产者send()方法看似单条发送,实则内部批量处理 。消息先缓存,待数量足够或某个时间间隔 ,Kafka客户端将其打包成批次,一并发送给Broker。。

  • Broker服务端Kafka不会将消息分批后逐条处理 ,因其效率低下。Kafka智能地以批为单位处理消息,整个Broker处理流程(写入、读取、复制),批消息均保持原状不被拆分 。

  • 消费者从Broker拉取一批消息 后,在客户端拆分这批消息,再逐条交给用户代码处理。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

2. 磁盘顺序读写

Kafka大量使用磁盘进行数据存储,并采用顺序写入 的方式。顺序写入磁盘的速度远远高于随机写入,因为磁盘的物理结构决定了顺序写入可以减少磁头的寻道时间 ,从而提高写入速度。

kafka是如何使用顺序读写提升磁盘IO性能的?

每个分区接收到的Producer消息,均按顺序被写入对应的日志文件中,当文件写满后,则开启新文件进行后续写入。在消费环节,从全局指定位置(即特定日志文件的特定偏移处)起,消息被顺序读取。

3. 零拷贝技术

Kafka使用零拷贝技术将数据从磁盘直接发送到网络,避免了在内核空间和用户空间之间的多次数据拷贝。

传统的文件传输方式通常需要将数据从磁盘读取到内核缓冲区,然后再从内核缓冲区拷贝到用户空间,最后从用户空间拷贝到网络缓冲区发送出去。而零拷贝技术可以直接将数据从磁盘的文件描述符传递给网络接口,减少了数据拷贝的次数和开销。

传统的IO流程:

8c1e6714e227713e645ff490f06c123c.png
  • 用户应用进程调用read函数,向操作系统发起IO调用,上下文从用户态转为内核态(切换1)

  • DMA控制器把数据从磁盘中,读取到内核缓冲区。

  • CPU把内核缓冲区数据,拷贝到用户应用缓冲区,上下文从内核态转为用户态(切换2) ,read函数返回

  • 用户应用进程通过write函数,发起IO调用,上下文从用户态转为内核态(切换3)

  • CPU将用户缓冲区中的数据,拷贝到socket缓冲区

  • DMA控制器把数据从socket缓冲区,拷贝到网卡设备,上下文从内核态切换回用户态(切换4) ,write函数返回

sendfile+DMA scatter/gather 实现的零拷贝流程如下:

6b9c937e83804c9ab425484ff65a582a.png
  • 用户进程发起sendfile系统调用,上下文(切换1)从用户态转向内核态

  • DMA控制器,把数据从硬盘中拷贝到内核缓冲区。

  • CPU把内核缓冲区中的文件描述符信息(包括内核缓冲区的内存地址和偏移量)发送到socket缓冲区

  • DMA控制器根据文件描述符信息,直接把数据从内核缓冲区拷贝到网卡

  • 上下文(切换2)从内核态切换回用户态,sendfile调用返回。

Kafka 在处理大规模数据传输和存储时,采用了几种高效的零拷贝技术,主要包括:

  • sendfile:用于减少文件读取和网络传输中的内存拷贝,提高消息传输效率。

  • DMA(硬件加速):在高性能硬件环境下,Kafka 可通过硬件支持的 DMA 技术来加速数据传输。

4. 页缓存加速消息读写

Kafka利用PageCache(操作系统内存中的磁盘文件缓存 )来加速消息的读写。

当应用程序读写文件时,实际上操作的是PageCache中的副本。写入时,数据先写入PageCache,再批量写到磁盘;读取时,若PageCache中有数据则直接读取,否则操作系统会从磁盘加载数据到PageCache。Kafka读写消息时充分利用这一特性,由于消息通常很快被消费,按LRU策略,PageCache命中率高。这既提高了读取速度,又为写入让出了磁盘IO资源,间接提升了写入性能。

5. 分区与并行处理

Kafka的主题(Topic )可以被分成多个分区(Partition ),每个分区可以分布在不同的服务器上。这样可以实现并行写入和读取,提高了吞吐量。

其实以前写接口优化的时候,就提到并行优化的方式,思想道理其实是一样的:

比如一个查询APP首页查询接口:查用户信息、查banner信息、查弹窗信息是串行的:

42d6feb74b1ec36ca000e56081167064.png

如果修改为并行,接口耗时将大大降低

b24f8d5831f863e003ee71d6c1306561.png

6. 数据压缩

生产者在发送消息到Kafka集群之前,可以对消息进行压缩 。这种在生产者端进行压缩的方式能够减少发送到Kafka集群的数据量,从而降低网络传输的带宽消耗,并提高数据传输的效率。

压缩传输内容,传输报文变得更小,因此传输会更快啦。10M带宽,传输10k的报文,一般比传输1M的会快呀。

打个比喻,一匹千里马,它驮着100斤的货跑得快,还是驮着10斤的货物跑得快呢?

kafka生产者端压缩算法的类型主要有:Snappy、GZIP、LZ4或zstd等


欢迎加入我的知识星球,全面提升技术能力。

👉 加入方式,“长按”或“扫描”下方二维码噢:

d7ec98070346e4d1746faf1c0bcd94ae.png

星球的内容包括:项目实战、面试招聘、源码解析、学习路线。

34788cb7a162dca14de6402710981564.png

1a606a456f2096e6cabccd8c374f8047.pngbd2f5956239cf73965744edb6fd6e44d.png56976c06f1d55b26183f5aa863d3c5ba.pnge803af68de3e1c19ed2e1bcde717abfc.png

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
万字长文带你由浅入深夯实ARM汇编基础——汇编指令及寻址方式最全梳理(附示例)! 见到汇编就害怕?读完这篇,扫除汇编拦路虎!!(示例丰富,可做手册,随手查阅!) 阅读详情

相关推荐

开源CMDB与资产管理平台对比报告

本文对比分析了9款主流开源CMDB平台,从集成能力、功能完整性和多语言支持三个维度进行评测。重点介绍了VeCMDB、蓝鲸CMDB、WeCMDB和OpsAny等国产平台的特色:VeCMDB以动态模型和自动发现见长;蓝鲸CMDB适合超大规模企业级应用;WeCMDB专注金融级高并发场景;OpsAny提供一体化运维解决方案。针对不同规模企业给出选型建议:中小团队推荐Snipe-IT等轻量工具;大型企业建议蓝鲸或WeCMDB;需国产化适配的可选VeCMDB或OpsAny。文章还特别指出iTop、GLPI等适合ITIL

huang0612123的博客 1081

字节Java一面:kafka为什么这么快?

有朋友去字节面试。?其实这不就送分题嘛,哈哈~~ 我梳理了一下答案:批量处理思想磁盘顺序读写零拷贝技术页缓存加速消息读写分区与并行处理数据压缩。

mf97532的博客 829

lift off工艺为什么常用蒸发的方式镀膜?

电子束蒸发中,蒸发物质从源头直接升华并沿直线路径沉积到晶圆上,它可以避免金属在掩模侧壁的覆盖,只在表面进行沉积。在镀膜结束后,在进行光刻胶剥离时,去胶液无法与光刻胶接触反应,导致光刻胶剥离很困难。欢迎加入我的半导体制造知识星球社区,目前社区有1900人左右。我观察到晶圆厂中lift off工艺,镀膜都是用的电子束蒸发的方式,很少有用磁控溅射的方式,为什么?需要增加撕胶工序,将胶面上覆盖的膜层撕掉,使光刻胶露出,这样才容易剥离。上图为磁控溅射的膜层截面图,去胶液很难突破侧壁膜层,进行反应。

1688

Kafka为什么比其他消息中间件快

无论 Kafka 作为 MQ 也好,还是作为存储层也罢,无非就是两个功能,一是 Producer 生产的数据存到 Broker,二是 Consumer 从 Broker 读取数据。那 Kafka 的快也就体现在读写两个方面了,下面我们就聊聊 Kafka 快的原因。

程序猿进阶 1484

sm2国密加密算法js实现(真实可用)

sm2国密加密算法js实现加密后内容引入文件js实现sm2加密 加密后内容 可自行验证是否是你需要的sm2加密算法 私钥:BF1F907B4E0487F798DC80AFD7BC2A6201E8514233002272EA3BE2FC6F797843 公钥:前缀04+x坐标+y坐标 042DBA45E7B03394F603CADAFCDDEC854D3E01A4E9C52CD799B85B1A14BDB970137AE58BA553D79F058604DC1CD4B77DE5408BA3308E767584

gusijin的博客 1万+

深入解析Android Thermal框架:从应用层到驱动层的温度管理机制

本文深入解析Android Thermal框架的温度管理机制,从应用层到驱动层详细介绍了温度监测、热状态评估和降温策略执行的全过程。通过分层架构解析和关键组件交互,帮助开发者理解Android设备如何实现高效的温度控制,确保硬件安全并优化性能。

weixin_29303701的博客 257

进字节了,Kafka 为什么这么快?

『码哥』的 Redis 系列文章有一篇讲透了 Redis 的性能优化 ——《Redis 核心篇:唯快不破的秘密》。深入地从 IO、线程、数据结构、编码等方面剖析了 Redis “快”的内部秘密。65 哥深受启发,在学习 Kafka 的过程中,发现 Kafka 也是一个性能十分优秀的中间件,遂要求『码哥』讲一讲 Kafka 性能优化方面的知识,所以『码哥』决定将这篇性能方面的博文作为 Kafka 系...

码哥字节 914

单细胞分析实录(12): 如何推断肿瘤细胞

公众号后台回复20210418,获取本文的测试数据 1. 回顾 前面我已经讲解了inferCNV的基本用法,这一节继续学习:如何推断肿瘤细胞。本文应该是到目前为止,全网最详细的帖子(之一)。 关于肿瘤细胞的推断,比如研究上皮细胞起源的肿瘤,我见过的一些做法如下 简单粗暴型:将来源肿瘤病灶的所有上皮细胞都看成是肿瘤细胞 看CNV:将来源于肿瘤病灶的上皮细胞和参考细胞比较,将那些有明显CNV的细胞看作肿瘤细胞 看表达特征:考虑到有的肿瘤细胞可能没有CNV层面的变化,有的文章会根据肿瘤与正常的表达谱来区分是.

TOP生物信息 1万+

kafka为什么这么快?

Kafka 的高性能源于多项设计优化:1.顺序 I/O 替代随机 I/O,最大化磁盘吞吐。2.零拷贝 减少 CPU 和内存开销。3.分区分段 实现并行处理与快速定位。4.批量与压缩 降低网络和磁盘压力。5.分布式架构 支持水平扩展。这些技术共同作用,使 Kafka 成为处理海量实时数据的首选消息系统。

qq_39126115的博客 2134

【异常】OpenClaw提示Message ordering conflict - please try again. If this persists, use /new to start a fr

摘要:OpenClaw助手出现"Message ordering conflict"异常时,表明会话消息排序冲突,主要由消息队列时序错乱、会话同步异常或上下文过载引起。解决方案包括:1)基础重试暂停后单发指令;2)最优方案是发送/new重置会话;3)极端情况下需重启客户端或检查指令格式。预防建议包括避免高频并发指令、定期重置会话及确保网络稳定。该报错属业务层异常,不影响账号安全。

奶爸的编程之路,也就一周冷个三天 424

【XSRP软件无线电】基于软件无线电平台的FM数字接收系统设计(含有完整工程资料获取链接)

随着无线通信技术的快速发展,软件无线电(Software Defined Radio, SDR)作为一种新兴的无线通信技术,逐渐成为研究和应用的热点。传统的无线接收机通常依赖于专用硬件实现其功能,灵活性和可扩展性有限。相较之下,软件无线电利用软件来实现信号处理和调制解调功能,能够适应多种频率和调制方式,使无线通信系统更加灵活和高效。在FM(频率调制)广播中,数字接收技术的应用不仅提高了信号的抗干扰能力,还能提供更好的音质和更多的附加信息(如广播电台名称、节目内容等)。

嵌入式技术开发 1368

Kafka为什么快

Kafka为什么快

959

基于四旋翼模型的火箭型无人机视线角保持控制仿真设计

本文针对火箭型无人机的视线角保持控制问题展开研究。基于四旋翼动力学模型,通过改造设计了一种摄像头朝上安装的特殊无人机系统,用于追踪空中目标。文章详细推导了坐标系定义、运动学和动力学方程,重点分析了摄像头安装与视线几何关系,建立了目标运动模型和视线向量计算方法。通过解算期望姿态角,实现了使机体Z轴始终对准目标的控制目标。仿真结果表明,该系统能有效完成视线角保持任务,为空对空监视等应用场景提供了可行方案。~~~~~

huanghm88的专栏 143

Kafka为什么这么快?

题上的“快”过于口语化,准确来讲是“高吞吐量”,也就是为什么Kafka每秒钟可处理百万级别的消息。面试官通常希望,候选人能够逻辑清晰地从Kafka底层原理的角度,盘点出若干个高吞吐量的原因。在本文中,我们就来针对这个问题梳理一下。

z1ztai的博客 1160

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

为什么 Kafka 这么快?

Kafka 的很多设计理念都比较前卫,从将工作负担分担到了客户端,从 broker 的日志持久化、批处理、压缩、零拷贝 I/O 和并行流——Kafka 对其他开源的和商业的消息中间件都带...

优快云资讯 2364

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Kafka 消息的写入过程简单介绍一下,Kafka 为什么这么快?

Kafka 的消息写入过程和高性能设计是其核心优势。

大户影视的博客 1707

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

kafka为什么如此之快?

kafka为什么如此之快?

weixin_45817985的博客 893

我的字节一面

这篇文章分享了作者参加字节跳动面试的经历与经验总结。在面试准备方面,作者强调自我介绍要简洁突出重点,项目细节要烂熟于心,并建议主动思考项目中的技术难点。技术考察涉及MySQL引擎、索引优化、Redis缓存问题、锁粒度调整和Kafka机制等知识点。作者特别提醒要调整好心态,把面试视为专业交流。最后附上一道关于最长连续1的滑动窗口算法题,并提到自己的简历因亮点突出获得面试官肯定。全文展现了作者对面试的深刻反思与实用建议。

🌟【Java萌新成长日记】—— 从零开始,和代码做朋友 1610

Kafka为什么快,吞吐量大

学无止境,加油! Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。 Kafka虽然是基于磁盘做的数据存储,但却具有高性能、高吞吐、低延时的特点,其吞吐量动辄几万、几十上百万。 但是很多使用过Kafka的人,经常会被问到这样一个问题,Kafka为什么速度快,吞吐量大;大部分被问的人都是一下子就懵了,或者是只知道一些简单的点,本文就简单的介绍一下Kafka为什么吞吐量大,速度快。 一、顺序读写 众所周知Kafka是将消息记录持久化到本地磁盘中

孤刺 1121

基于磁盘的Kafka为什么这么快

Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。Kafka虽然是基于磁盘做的数据存储,但却具有高性能、高吞吐、低延时的特点,其吞吐量动辄几万、几十上百万,这其中的原由值得我们一探究竟。

Focus on Lakehouse 854

kafka 为什么那么快

Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。 Kafka虽然是基于磁盘做的数据存储,但却具有高性能、高吞吐、低延时的特点,其吞吐量动辄几万、几十上百万。 但是很多使用过Kafka的人,经常会被问到这样一个问题,Kafka为什么速度快,吞吐量大;大部分被问的人都是一下子就懵了,或者是只知道一些简单的点,本文就简单的介绍一下Kafka为什么吞吐量大,速度快。 一、顺序读写 众所周知Kafka是将消...

yaobo2816的专栏 211

Kafka 是怎么存储的?为什么速度那么快?

文章收录地址:Java-Bang 专注于系统架构、高可用、高性能、高并发类技术分享 Kafka 依赖于文件系统(更底层地来说就是磁盘)来存储和缓存消息。在我们的印象中,对于各个存储介质的速度认知大体同下图所示的相同,层级越高代表速度越快。很显然,磁盘处于一个比较尴尬的位置,这不禁让我们怀疑 Kafka 采用这种持久化形式能否提供有竞争力的性能。在传统的消息中间件 RabbitMQ 中,就使用内存作为默认的存储介质,而磁盘作为备选介质,以此实现高吞吐和低延迟的特性。然而,事实上磁盘可以比我们预想的要快.

码农架构 1645

详细说一下Kafka性能高的原因(即Kafka为什么那么快)

调用read()函数,从用户态切换到内核态CPU发起IO请求CPU负责将磁盘数据放入到磁盘数据缓冲区发起IO中断信号,CPU接收到中断信号后开始数据传输,数据传输CPU是无法执行其他任务的CPU把磁盘控制器的缓冲区的数据一次一个字节地读进自己的寄存器,然后再把寄存器里的数据写入到内存(PageCache 页面缓存)read()调用返回,从内核态切换成用户态我们传统的read()和write()有四次拷贝和四次用户态和内核态的上下文切换四次拷贝:磁盘文件通过DMA拷贝到内核缓冲区。

LUCIAZZZ的博客 1147
上一篇: 张雪峰公司今年的年终奖...
下一篇: 自己写一个分布式定时任务框架+负载均衡+OpenAPI异步调用!!
公众号-芋道源码
博客等级 码龄10年 1634粉丝 377原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值