我对Kafka高性能的四个关键点的理解

磁盘顺序读写, 省去寻址耗时, 一次寻址, 持续写入或读取, 提升磁盘IO性能

顺序读写, 每个日志段都从一个位置开始写入,只需要寻址一次就可以持续写入, 省去了磁盘IO的耗时大头: 寻址时间, 基于这个特性, Kafka的存储读写就使用顺序读写技术. 在写入时, 对于每个分区, kafka会将消息追加到日志上, 持续追加到一个日志段的最新位置上, 当一个日志满了, 再开辟一个新的日志, 继续顺序写下去. 类似的, 在消费时, 消费者也是从某个log文件的一个位置开始, 持续读取数据.

页缓存, 减少磁盘IO操作, 提升磁盘读写性能

页缓存是操作系统为磁盘建立的缓存, 无论使用什么程序语言, 应用程序的磁盘IO都是与pagecache打交道, 而尽可能的避免做直接磁盘IO读写操作, 通过缓存技术实现磁盘IO操作的异步化.

零拷贝, 减少冗余数据复制流程, 提升消费者性能

零拷贝也是操作系统提供的一种数据读写技术, 将数据从磁盘到网络传输的搬运全都在内核空间中完成, 避免从内核空间到用户空间冗余且需要CPU参与的数据拷贝动作, 从而提升性能.

批量操作技术, 辅以异步化, 提升消费与生产的消息性能, 同时减轻broker的压力, 提升负载

一次传输30条数据肯定比分30次传输30条数据效率要高的多, 避免减少了网络IO交互的频率, 也可以通过数据压缩等各种优化手段对数据进行优化处理, kafka在对数据的读写都采取了批处理技术, 同时批处理也是一种异步化的技术. 即: 在生产端,数据调用mafka的接口做消息发送, 但这条消息实际上并不会被真正的发送给服务端, 而是producer端先攒着, 等攒够了批处理的量才会被发送处理, 这实际上就是一种缓存加异步化的技术, 和页缓存的写没有本质的区别. 类似的消息消费, 数据一次拉取也是一批数据, 就类似于pagecache的预读特性, 每次加载一批数据, 然后缓存在消费者客户端, 从而减少网络IO的动作. 总体来说kafka的批处理技术不仅体现在网络IO上, 还有磁盘IO上, 消息的批量消费与生产大大的减轻了broker处理请求的次数, 比如处理一次新的网络请求的线程上下文切换的消耗或在网络中的耗时等, 从而提升了整体的吞吐量与处理能力.

相关推荐
小安同学iter19 分钟前
天机学堂day05
java·开发语言·spring boot·分布式·后端·spring cloud·微服务
孟意昶28 分钟前
Doris专题27-mysql兼容性与join连接
大数据·数据库·分布式·sql·mysql·doris
Wang's Blog1 小时前
Elastic Stack梳理:Logstash线程模型与多实例部署解析
分布式·elastic search
西岭千秋雪_1 小时前
MySQL日志梳理(存储引擎层)
java·数据库·分布式·mysql·oracle
小白|1 小时前
OpenHarmony + Flutter 混合开发进阶:构建支持离线优先、边缘同步与冲突解决的分布式数据应用
分布式·flutter
张人玉3 小时前
大数据hadoop系列——在ubuntu上安装HBase 伪分布式
大数据·hadoop·分布式·hbase
闲人编程3 小时前
API限流、鉴权与监控
分布式·python·wpf·限流·集群·令牌·codecapsule
苦学编程的谢4 小时前
RabbitMQ_4_高级特性(1)
分布式·rabbitmq
回家路上绕了弯4 小时前
技术团队高效协作:知识分享与协作的落地实践指南
分布式·后端
小熊officer4 小时前
RabbitMQ简介
分布式·rabbitmq