一步一个脚印,一天一道面试题。
Kafka
是热门的消息队列组件,在大数据中十分常见。Kafka
的快是其成为热门组件的重要原因。
那么就来聊聊,Kafka
为什么那么快。
批量读写
- 生产端批处理:Kafka 允许生产端
Producer
批量处理。例如消息可以聚合在一起,一起发送。能节省每次发起任务时间。
(举例:丢垃圾的时候不是有一点垃圾就下楼扔,而是先放垃圾桶,满了再下楼扔。这样我们能节省反复上下楼的时间) - 消费端批处理:与第 1 条类似。
零拷贝
常规的数据传输,是从系统磁盘,用户空间,内核空间,网络直接复制传输。多次的复制会消耗更多的CPU,内存资源。
Kafka
的零拷贝就是省去用户空间,减少数据的复制次数。
通过直接 sendFile
系统调用,直接从磁盘文件发送至网络接口,跳过用户态,减少复制次数。
以图片举例说明常规拷贝和零拷贝的区别:
常规数据传输:
数一下图片里的箭头 →,有 4 次数据的传输复制。
零拷贝数据传输:
数一下图片里的箭头 →,仅有 2 次数据的传输复制。
复制的次数少了,自然的速度就快很多。
其它加速因素
- 顺序写磁盘: Kafka 的消息是以分区为单位,顺序写磁盘。对比随机写入,不需要磁盘寻址,节省时间。磁盘寻址尤其在机械硬盘中占用时间多,是最费时间的部分。
- 高效消息存储: Kafka 有特殊的数据结构来存储日志,存得更少,读得更快。(有机会后面再拓展)
我是近未来,祝你变得更强!