kafka入门(七):kafka实现高吞吐量

kafka 高吞吐量

顺序写入磁盘

Kafka 使用 磁盘来存储和缓存消息。

Kafka 只能在日志文件的尾部追加新的消息,也就是 顺序写入磁盘。

顺序写入磁盘,让 Kafka 能实现更高的吞吐量。

页缓存

Kafka中大量使用页缓存,这是Kafka 实现高吞吐的重要因素之一。

页缓存,是操作系统实现的一种磁盘存储,用来减少对磁盘 IO 的操作。就是 把磁盘中的数据缓存到内存中,把对磁盘的访问变为对内存的访问

当一个进程准备读取磁盘上的文件内容时,操作系统会先查看待读取的数据所在的页(page) 是否在页缓存(pageCache) 中,如果存在则直接返回数据,从而避免了对物理磁盘的 IO 操作。如果没有,则操作系统会向磁盘发起读取请求并将读取的数据页存入页缓存中,之后再将数据返回给进程。

当一个进程准备将数据写入磁盘时,操作系统也会检查数据对应的页是否在页缓存中,如果不存在,则先在页缓存中添加相应的页,最后将数据写入对应的页。被修改过的页也就变成了脏页,操作系统会在合适的时间,把脏页中的数据写入磁盘,以保持数据的一致性。

零拷贝

除了 顺序写入磁盘、页缓存,Kafka 还使用 零拷贝 (Zero-Copy) 来提升性能。

零拷贝就是指将数据直接从磁盘文件复制到网卡设备中,而不需要经过应用程序。减少了内核和用户模式之间的上下文切换。

对 Linux 系统而言,零拷贝技术依赖于底层的 sendfile() 方法实现。

对 Java 语言,FileChannal.transferTo() 方法的底层实现就是 sendfile() 方法。

资料来源:

《深入理解Kafka:核心设计与实践原理》

相关推荐
Devin~Y7 小时前
电商场景下的Java面试实战:从Spring Boot微服务到Kafka、Redis与AI RAG
java·spring boot·redis·elasticsearch·spring cloud·微服务·kafka
AllData公司负责人10 小时前
数据同步平台|AIIData数据中台实现MySQL、Hive、Kafka 一键接入Doris
大数据·数据库·hive·mysql·kafka·实时同步
whaledown2 天前
互联网大厂Java求职面试三轮提问详解(涵盖Spring Boot、微服务、Kafka等核心技术)
java·jvm·数据库·spring boot·微服务·面试·kafka
梦想的颜色3 天前
【Docker部署插件】:使用 Docker 部署生产级 Kafka 完整版教程
安全·docker·中间件·kafka·消息队列·docker-compose·后端开发
考虑考虑3 天前
kafka4安装
后端·kafka·自动化运维
lzhcoder4 天前
Spring Boot 集成 Kafka:先跑通 Demo,再避开那 80% 的人踩过的坑
java·kafka
Kyrie_Li6 天前
Spring Boot Kafka 生产级配置全解析:从入门到精通
spring boot·后端·kafka
2301_801184756 天前
kafka-zookeeper
分布式·zookeeper·kafka
Devin~Y6 天前
抖音级短视频推荐与直播带货平台面试实战:从 Java 微服务到 RAG 智能客服全链路解析
java·spring boot·redis·spring cloud·kafka·agent·rag
livemetee6 天前
关于【Kafka高可用配置】
分布式·kafka