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

kafka 高吞吐量

顺序写入磁盘

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

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

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

页缓存

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

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

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

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

零拷贝

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

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

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

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

资料来源:

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

相关推荐
山沐与山7 小时前
【MQ】Kafka与RocketMQ深度对比
分布式·kafka·rocketmq
yumgpkpm9 小时前
Cloudera CDP7、CDH5、CDH6 在华为鲲鹏 ARM 麒麟KylinOS做到无缝切换平缓迁移过程
大数据·arm开发·华为·flink·spark·kafka·cloudera
树下水月9 小时前
Easyoole 使用rdkafka 进行kafka的创建topic创建 删除 以及数据发布 订阅
分布式·kafka
Cat God 0079 小时前
基于Docker搭建kafka集群
docker·容器·kafka
Cat God 00710 小时前
基于 Docker 部署 Kafka(KRaft + SASL/PLAIN 认证)
docker·容器·kafka
KD14 小时前
设计模式——责任链模式实战,优雅处理Kafka消息
后端·设计模式·kafka
原神启动11 天前
Kafka详解
分布式·kafka
一只懒鱼a1 天前
搭建kafka集群(安装包 + docker方式)
运维·容器·kafka
青春不流名1 天前
如何在Kafka中使用SSL/TLS证书认证
分布式·kafka·ssl
青春不流名1 天前
Kafka 的认证机制
kafka