我是靠谱客的博主 顺心冬天,最近开发中收集的这篇文章主要介绍Kafka高性能高吞吐的原因总结1、磁盘顺序读写2、零拷贝 3、分区分段+索引4、批量压缩 5、批量读写 6、优化JVM,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、磁盘顺序读写

保证了消息的堆积    

顺序读写 磁盘会预读,预读即在读取的起始地址连续读取多个页面,主要时间花费在了传输时间,而这个时间两种读写可以认为是一样的。
   

随机读写 因为数据没有在一起,将预读浪费掉了,需要多次寻道和旋转延迟,而这个时间可能是传输时间的许多倍。

2、零拷贝

避免CPU将数据从一块存储拷贝到另外一块存储的技术


    传统的数据复制:

  1.         读取磁盘文件数据到内核缓冲区
  2.         将内核缓冲区的数据copy到用户缓冲区
  3.         将用户缓冲区的数据copy到socket的发送缓冲区
  4.         将socket发送缓冲区中的数据发送到网卡、进行传输

    零拷贝:
        磁盘文件 → 内核空间读取缓冲区 → 网卡接口 → 消费者进程


3、分区分段+索引


    Kafka的message消息实际上是分布式存储在一个一 个小的segment中的,每次文件操作也是直接操作的segment。为了进一步的查询优化, Kafka又 默认为分段后的数据文件建立了索引文件,就是文件系统上的index文件。这种分区分段+索引的设计,不仅提升了数据读取的效率,同时也提高了数据操作的并行度

4、批量压缩

多条消息一起压缩,降低带宽


5、批量读写

kafka允许进行批量发送消息,producer发送消息的时候,可以将消息缓存在本地,等到固定条件再发送到kafka

消息条数满足固定条数
一段时间发送一次数据压缩

kafka还支持对消息集合进行压缩,producer可以通过GZIP或Snappy格式对消息集合进行压缩,压缩的好处就是减少传输的数据量,减轻对网络传输的压力。 


6、优化JVM

直接操作page cache,不是JVM、避免GC耗时及对象创建耗时,且读写速度更高,进程重启、缓存也不会丢失。


 

最后

以上就是顺心冬天为你收集整理的Kafka高性能高吞吐的原因总结1、磁盘顺序读写2、零拷贝 3、分区分段+索引4、批量压缩 5、批量读写 6、优化JVM的全部内容,希望文章能够帮你解决Kafka高性能高吞吐的原因总结1、磁盘顺序读写2、零拷贝 3、分区分段+索引4、批量压缩 5、批量读写 6、优化JVM所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部