kafka为什么这么快

kafka具有高吞吐率特点,支持百万级每秒写入。kafka之所以这么快,主要有以下几方面的原因:

1、顺序写磁盘

优点:

(1)磁盘顺序读写可媲美内存的随机读写

(2)磁盘操作避免了内存GC效率低问题 

(3)系统冷启动时,磁盘缓存依然可用

2、使用内存映射文件(mmap: Memory Mapped Files

优点:

提升IO,省去了用户空间到内核空间复制的开销,适用于读取大文件。

缺点:

(1)因为是按操作系统页加载到内存,当文件不足一页时会有部分内存浪费

(2)当内存空间不足时可能导致缓存的频繁替换,而控制权在操作系统

3、Zero Copy(基于sendfile系统调用)

传统的网络传输文件,需要4次copy:

硬盘—>内核 buf—>用户 buf—>Socket 缓冲区—>协议引擎

而基于sendfile系统调用,减少了内核到用户、用户到Socket缓存区的两次copy

4、批量压缩

优点:减少数据大小,从而减少网络传输时间

缺点:额外消耗cpu资源,但通常网络传输带宽是瓶颈

标签: sendfile、copy、buf、内核、kafka、面试
  • 回复
隐藏