kafka性能高的影响因素

1.使用操作系统的页缓存
kafka的性能非常依赖于操作系统的页缓存,页缓存提供了比kafka进程内存更好的缓存方式。

2.零拷贝(linux的sendfile函数,对应FileChannel.transferto函数)
正常的从磁盘发送数据到网络要经过一下几个步骤:
a.把数据从磁盘读取到内核的read buffer内存中
b.把内核read buffer内存的数据读取到应用程序的用户内存uer buffer中
c.把用户user buffer内存中的数据写到socket buffer内核内存中
d.dma把socket buffer内存内存的数据写到网卡设备中

而使用了sendfile函数后流程变成了:
a.把数据从磁盘读取到内核的read buffer内存中
b.把read buffer的位置和长度标志成一个fd描述符对象,并把这个描述符放到socket buffer中
c.dma 把socket buffer中的fd指向的read buffer内存内容写到网卡设备中
整个过程少了两个步骤:从read buffer拷贝数据到应用程序内存以及从应用程序内存拷贝数据到socket buffer

你可能感兴趣的:(kafka,kafka)