kafka入门(七):kafka实现高吞吐量
kafka 高吞吐量
顺序写入磁盘
Kafka 使用 磁盘来存储和缓存消息。
Kafka 只能在日志文件的尾部追加新的消息,也就是 顺序写入磁盘。
顺序写入磁盘,让 Kafka 能实现更高的吞吐量。
页缓存
Kafka中大量使用页缓存,这是Kafka 实现高吞吐的重要因素之一。
页缓存,是操作系统实现的一种磁盘存储,用来减少对磁盘 IO 的操作。就是 把磁盘中的数据缓存到内存中,把对磁盘的访问变为对内存的访问。
当一个进程准备读取磁盘上的文件内容时,操作系统会先查看待读取的数据所在的页(page) 是否在页缓存(pageCache) 中,如果存在则直接返回数据,从而避免了对物理磁盘的 IO 操作。如果没有,则操作系统会向磁盘发起读取请求并将读取的数据页存入页缓存中,之后再将数据返回给进程。
当一个进程准备将数据写入磁盘时,操作系统也会检查数据对应的页是否在页缓存中,如果不存在,则先在页缓存中添加相应的页,最后将数据写入对应的页。被修改过的页也就变成了脏页,操作系统会在合适的时间,把脏页中的数据写入磁盘,以保持数据的一致性。
零拷贝
除了 顺序写入磁盘、页缓存,Kafka 还使用 零拷贝 (Zero-Copy) 来提升性能。
零拷贝就是指将数据直接从磁盘文件复制到网卡设备中,而不需要经过应用程序。减少了内核和用户模式之间的上下文切换。
对 Linux 系统而言,零拷贝技术依赖于底层的 sendfile() 方法实现。
对 Java 语言,FileChannal.transferTo() 方法的底层实现就是 sendfile() 方法。
资料来源:
《深入理解Kafka:核心设计与实践原理》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-01-11 耗时统计--StopWatch
2018-01-11 设计模式:单例模式