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

相关推荐
嘉禾望岗5031 天前
spark算子类型
大数据·分布式·spark
大厂技术总监下海1 天前
来自美团生产环境的实战派:开源CAT监控,如何保障超大规模分布式系统可观测性?
分布式·开源
大厂技术总监下海1 天前
深入 Apache Dubbo 架构:解读一个开源高性能 RPC 框架的设计哲学与核心源码
分布式·微服务
前端不太难1 天前
不写 Socket,也能做远程任务?HarmonyOS 分布式任务同步实战
分布式·华为·harmonyos
yumgpkpm1 天前
Cloudera CDP 7.3(国产CMP 鲲鹏版)平台与银行五大平台的技术对接方案
大数据·人工智能·hive·zookeeper·flink·kafka·cloudera
回家路上绕了弯1 天前
Spring Retry框架实战指南:优雅处理分布式系统中的瞬时故障
分布式·后端
前端不太难1 天前
HarmonyOS 分布式开发第一课:设备间协同调试实战
分布式·华为·harmonyos
AutoMQ1 天前
当 Kafka 架构显露“疲态”:共享存储领域正迎来创新变革
分布式·架构·kafka
程序员阿鹏1 天前
RabbitMQ持久化到磁盘中有个节点断掉了怎么办?
java·开发语言·分布式·后端·spring·缓存·rabbitmq
独自破碎E1 天前
Kafka的索引设计有什么亮点?
数据库·分布式·kafka