首页 > 其他分享 >Kafka为什么性能这么快

Kafka为什么性能这么快

时间:2023-03-14 18:33:06浏览次数:35  
标签:为什么 缓存 性能 cache Kafka 磁盘 拷贝 os

1、页缓存技术page cache

Kafka 是基于操作系统 的页缓存(page cache)来实现文件写入的,我们也可以称之为 os cache,意思就是操作系统自己管理的缓存。

Kafka 在写入磁盘文件的时候,可以直接写入这个 os cache 里,也就是仅仅写入内存中,接下来由操作系统自己决定什么时候把 os cache 里的数据真的刷入磁盘文件中。

2、磁盘顺序写

另一个主要功能是 kafka 写数据的时候,是以磁盘顺序写的方式来写的,也就是说仅仅将数据追加到文件的末尾,不是在文件的随机位置来修改数据。

 

3、零拷贝

先来看看非零拷贝的情况,如下图所示:

Kafka 利用了 Linux 的 sendFile 技术(NIO),省去了进程切换和一次数据拷贝,通过 零拷贝技术,就不需要把 os cache 里的数据拷贝到应用缓存,再从应用缓存拷贝到 Socket 缓存了,两次拷贝都省略了,所以叫做零拷贝。

 

4、分区分段+索引

Kafka 的 message 是按 topic分 类存储的,topic 中的数据又是按照一个一个的 partition 即分区存储到不同 broker 节点。每个 partition 对应了操作系统上的一个文件夹,partition 实际上又是按照segment分段存储的。

 

文章来源: https://www.cnblogs.com/mikechenshare/p/16709978.html

标签:为什么,缓存,性能,cache,Kafka,磁盘,拷贝,os
From: https://www.cnblogs.com/loquat6/p/17215919.html

相关文章

  • 同步时间,为什么我选 Chrony 而不是 NTP ?
    初识chronychrony是网络时间协议(NetworkTimeProtocol)的通用实现 它不但可以提供保持系统时间与NTP时钟服务器同步的服务,还能作为NTP服务器对其他服务器提供时......
  • 为什么要使用线程池?创建线程池的参数有哪些?线程池的原理是什么?
    为什么要使用线程池?线程池有一下优点:线程在是非常宝贵的资源,使用线程池可以重复使用线程,避免频繁的创建和销毁线程所带来的系统损耗。可以根据系统的具体情况调整线程......
  • fidder为什么抓取不到网页的数据
    fidder为什么抓取不到网页的数据(1)配置Fiddler允许监听https(2)配置Fiddler允许远程连接(3)配置手机端打开手机连接到同一局域网的wifi,并修改该wifi网络详......
  • Golang Block 到底是什么? `i:=i` 合法? 为什么能解决闭包变量冲突?
    GolangBlock到底是什么?i:=i合法?为什么能解决闭包变量冲突?什么?你告诉我i:=i不仅合法,而且还常用。甚至能解决并发编程中的变量冲突?以下这段代码出自golang官方的......
  • Nginx:轻松搭建高性能Web服务的必备利器
    一、Nginx简介1.1Nginx的特点和优点高性能:Nginx采用了事件驱动、异步非阻塞的处理方式,可以处理大量并发连接请求,同时减少服务器资源的占用。它的吞吐量比传统的Web服务器高......
  • docker安装kafka
    dockerrun-d--namezookeeper-p2181:2181-tzookeeper:latest  dockerrun-d--namekafka-p9092:9092-eKAFKA_BROKER_ID=0-eKAFKA_ZOOKEEPER_CONNEC......
  • .NET中委托性能的演变
    .NET中的委托.NET中的委托是一项重要功能,可以实现间接方法调用和函数式编程。自.NETFramework1.0起,委托在.NET中就支持多播(multicast)功能。通过多播,我们可以在单个委托......
  • React有Fiber架构 为什么还需要 useTransition( ) 钩子优化 ?
    因为fiber的最小单元是React元素,对于一个非常耗时的函数,fiber是无法把一个函数拆分成几部分去执行的,仍然会有顶帧(卡顿)的现象发生,此时就需要使用useTransition(()=>目标Func......
  • go timer踩坑记录,为什么,如何正确使用
    业务需求:开一个循环处理外部发来的任务,如果一定时间内没有任务发过来就退出,处理完一个任务后刷新超时时间然后我就写了这个funchandle(reqCh<-chanint){ a:=time.......
  • Kafka、RabbitMQ、RocketMQ差异
    消息中间件消息中间件是分布式系统中重要的组件,本质就是一个具有接收消息、存储消息、分发消息的队列,应用程序通过读写队列消息来通信。在电商中,如订单系统处理完订单后,把订......