Kafka中sequence IO、PageCache、SendFile的应用详解

VSole2022-08-04 16:29:49

大家都知道Kafka是将数据存储于磁盘的,而磁盘读写性能往往很差,但Kafka官方测试其数据读写速率能达到600M/s,那么为什么Kafka性能会这么高呢?

首先producer往broker发送消息时,采用batch的方式即批量而非一条一条的发送,这种方式可以有效降低网络IO的请求次数,提升性能。此外这些批次消息会"暂存"在缓冲池中,避免频繁的GC问题。批量发送的消息可以进行压缩并且传输的时候可以进行高效的序列化,从而减少数据大小。

Kafka除了在producer发送消息方面做了很多优化,还有很多其他的优化,比如Kafka利用了sequence IO、PageCache、SendFile这3种处理方案:

sequence IO

首先来了解一下磁盘的特性:快速顺序读写、慢速随机读写。因为磁盘是典型的IO块设备,每次读写都会经历寻址,其中寻址中寻道是比较耗时的。随机读写会导致寻址时间延长,从而影响磁盘的读写速度。

大家有没有想过MapReduce进行shuffle的时候,为什么map端和reduce端要进行排序,不排序不也不影响正常业务的处理,排序反而因为消耗资源增加了处理时间?

以map端为例,执行过程中会产生很多小文件,这些小文件要经历归并排序等一系列处理后才会被reduce端进行处理。提前对未合并的文件进行排序正是利用了磁盘快速顺序读写的特性来提高归并排序的速度。

而Kafka在将数据持久化到磁盘时,采用只追加的顺序写,有效降低了寻址时间,提高效率。下图展示了Kafka写入数据到partition的方式:

可以看到Kafka会将数据插入到文件末尾,并且Kafka不会"直接"删除数据,而是把所有数据保存到磁盘,每个consumer会指定一个offset来记录自己订阅的topic的partition中消费的位置。当然我们可以设置策略来清理数据,比如通过参数log.retention.hours指定过期时间,当达到过期时间时,Kafka会清理数据。

PageCache

PageCache是系统级别的缓存,它把尽可能多的空闲内存当作磁盘缓存使用来进一步提高IO效率,同时当其他进程申请内存,回收PageCache的代价也很小。

当上层有写操作时,操作系统只是将数据写入PageCache,同时标记Page属性为Dirty。当读操作发生时,先从PageCache中查找,如果发生缺页才进行磁盘调度,最终返回需要的数据。

PageCache同时可以避免在JVM内部缓存数据,避免不必要的GC、以及内存空间占用。对于In-Process Cache,如果Kafka重启,它会失效,而操作系统管理的PageCache依然可以继续使用。

对应到Kafka生产和消费消息中:

producer把消息发到broker后,数据并不是直接落入磁盘的,而是先进入PageCache。PageCache中的数据会被内核中的处理线程采用同步或异步的方式写回到磁盘。

Consumer消费消息时,会先从PageCache获取消息,获取不到才回去磁盘读取,并且会预读出一些相邻的块放入PageCache,以方便下一次读取

如果Kafka producer的生产速率与consumer的消费速率相差不大,那么几乎只靠对broker PageCache的读写就能完成整个生产和消费过程,磁盘访问非常少。

SendFile

传统的网络I/O过程:

1.操作系统从磁盘把数据读到内核区

2.用户进程把数据从内核区copy到用户区

3.然后用户进程再把数据写入到socket,数据流入内核区的Socket Buffer上

4.最后把数据从socket Buffer中发送到到网卡,这样完成一次发送

可以发现,同一份数据在内核Buffer与用户Buffer之间拷贝两次:

但是通过SendFile(又称zero copy)优化后,直接把数据从内核区copy到socket,然后发送到网卡,避免了在内核Buffer与用户Buffer来回拷贝的弊端:

不仅是Kafka,Java的NIO提供的FileChannle,它的transferTo、transferFrom方法也利用了这种在内核区完成数据传输的功能。

科技新闻kafka
本作品采用《CC 协议》,转载必须注明作者和本文链接
据英国科技新闻网站The Register报道称,丽笙酒店集团(Radisson hotel Group,以下简称“丽笙”)已经于10月30日开始向参与其奖励计划的会员发出电子邮件,确认了一起黑客攻击,而这些会员的详细个人信息可能已经在此次攻击中遭到泄露。
美国科技公司谷歌收购了以色列网络安全初创公司 Siemplify。
10月27日,中国电子旗下麒麟软件在2021操作系统产业峰会上正式发布“银河麒麟V10 SP1”。该产品是适应云计算和移动互联网进一步普及的发展趋势,针对网信产业转型升级的实际需求而推出的升级产品,不仅安全能力得到进一步提升,而且实现融入移动等新特性,达到了中国操作系统的全新高度。
企业应该了解这些威胁载体,以及向预防和减轻威胁的网络安全专业人员咨询网络安全威胁的预测至关重要。网络犯罪即服务使不法分子能够向他人提供黑客服务并收取费用。
据央视新闻报道,今年以来,在工信部开展的App侵害用户权益专项整治中,腾讯公司旗下9款产品存在违规行为,共计4批次被公开通报,违反了2021年信息通信业行风纠风相关要求。腾讯公司11月24日下午表示,公司正持续升级App对用户权益保护的各项措施,并配合监管部门进行正常的合规检测。
9月23日,由国务院国资委新闻中心、山东省国资委、济南市人民政府、经济参考报社主办的第六届中国企业论坛在山东济南召开。
在法律上,Amicus三角裤被称为“ amicus curiae”,拉丁语为“法院之友”。在这种情况下,简报旨在向WhatsApp提供支持,以说服美国第九巡回上诉法院对NSO的活动负责。迄今为止,科技公司和该案的原判还没有被这一论点说服。WhatsApp声称,这次攻击违反了美国各州和联邦法律,包括《 美国计算机欺诈和滥用法》,其目的是禁止NSO Group使用Facebook和WhatsApp服务,并寻求其他未指定的赔偿。
2020年2月,亚马逊AWS经历了有史以来最大的DDoS攻击,峰值流量高达2.3Tbps,超过了2018年3月所记载的1.7Tbps攻击。2022年2月起,俄乌冲突加剧,没有硝烟的网络空间成为新的作战场域,DDoS攻击造成众多关键基础设施和网络系统瘫痪,严重影响社会秩序。2022年7月,巴西大选期间,境内多个政府网站、网络运营商、教育机构、新闻门户遭遇目的性强且持续性DDoS攻击。
新华三中标中国移动数据中心管理交换机集采项目近日,新华三对外宣布,已成功中标中国移动数据中心管理交换机集采项目。奇安信与吉大正元达成战略合作7月20日上午,奇安信集团与吉大正元签署战略合作协议。双方表示将结合各自业务优势,进行能力融合,共同携手推出全方位解决方案。爱数中标中车时代电气有限公司相关项目近日,爱数对外公布喜讯,称已经成功中标中车时代电气有限公司相关项目。
截至目前,“科技创新再贷款”支持专区已初步汇聚支持范围内企业相关数据,包括高新技术企业、“专精特新”中小企业、国家技术创新示范企业、制造业单项冠军企业等,已提交融资需求近1000亿元。“科技创新再贷款”支持专区预计将于2022年5月6日正式向支持对象开放,符合要求的科技创新企业可通过国家产融合作平台快捷入口提交融资需求,也可在平台注册获取更多金融服务。
VSole
网络安全专家