我对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处理请求的次数, 比如处理一次新的网络请求的线程上下文切换的消耗或在网络中的耗时等, 从而提升了整体的吞吐量与处理能力.

相关推荐
Java 码思客3 分钟前
【Redis分布式缓存实战】第4章 单机Redis部署、配置与基础优化
redis·分布式·缓存
卷毛迷你猪5 分钟前
快速实验篇(A3)基于 Hive 的气象数据数仓构建与干旱指标初步分析
大数据·hadoop·分布式
卷毛迷你猪8 分钟前
快速实验篇(A4)Hive 数据仓库进阶:全站点干旱事件识别与多维统计分析
数据仓库·hive·hadoop·分布式
RingWu1 小时前
高并发三板斧-异步
分布式·微服务·架构
搞科研的小刘选手11 小时前
【中山大学主办】第六届计算机科学与区块链国际学术会议(CCSB 2026)
分布式·神经网络·计算机视觉·区块链·计算机科学·共识算法·自然语言
小饼干在学嘎瓦12 小时前
本地缓存和分布式缓存如何选择?
分布式·缓存
XLYcmy14 小时前
全链路验证测试系统:一个针对智能代理(Agent)系统全链路能力的自动化验证脚本
分布式·python·http·网络安全·ai·llm·agent
phltxy1 天前
HAProxy安装与RabbitMQ负载均衡配置
分布式·rabbitmq·负载均衡
jiayong231 天前
Kafka 高吞吐消息链路常见面试问题及详细解答
分布式·面试·kafka
卷毛迷你猪1 天前
快速实验篇(A2-2)数据清洗规则修正与多语言实现验证
hadoop·分布式