概述
1、磁盘顺序读写
保证了消息的堆积
顺序读写 磁盘会预读,预读即在读取的起始地址连续读取多个页面,主要时间花费在了传输时间,而这个时间两种读写可以认为是一样的。
随机读写 因为数据没有在一起,将预读浪费掉了,需要多次寻道和旋转延迟,而这个时间可能是传输时间的许多倍。
2、零拷贝
避免CPU将数据从一块存储拷贝到另外一块存储的技术
传统的数据复制:
- 读取磁盘文件数据到内核缓冲区
- 将内核缓冲区的数据copy到用户缓冲区
- 将用户缓冲区的数据copy到socket的发送缓冲区
- 将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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复