kafka具有高吞吐率特点,支持百万级每秒写入。kafka之所以这么快,主要有以下几方面的原因:
优点:
(1)磁盘顺序读写可媲美内存的随机读写
(2)磁盘操作避免了内存GC效率低问题
(3)系统冷启动时,磁盘缓存依然可用
优点:
提升IO,省去了用户空间到内核空间复制的开销,适用于读取大文件。
缺点:
(1)因为是按操作系统页加载到内存,当文件不足一页时会有部分内存浪费
(2)当内存空间不足时可能导致缓存的频繁替换,而控制权在操作系统
传统的网络传输文件,需要4次copy:
硬盘—>内核 buf—>用户 buf—>Socket 缓冲区—>协议引擎
而基于sendfile系统调用,减少了内核到用户、用户到Socket缓存区的两次copy
优点:减少数据大小,从而减少网络传输时间
缺点:额外消耗cpu资源,但通常网络传输带宽是瓶颈