一、批量消息
虽然我们是一笔一笔消息的发送给kafka,但是kafka并不是立即就发送出去的,而是先将消息缓存起来,再一批一起等个合适的时机一起发送出去。
消费端收到消息不是一个个拆出来一个个处理,而是直接作为一批一起处理,一起读写磁盘io,一起复制,这都大大加快了io的速度。
二、顺序读写
磁盘io分为顺序读写和随机读写,而顺序读写的速度要比随机读写的速度要快得多。所以kafka采用顺序读写的机制,收到消息的时候在日志文件顺序中写下多条消息,发送的时候又是顺序的读出多条消息。
三、page cache
page cache也就是os cache,只有page cache中没有才会到磁盘中进行读写,这就减少了一些与磁盘io的次数。
四、零拷贝
如果要读写的消息不在page cache中,那么就会发生多次拷贝。从磁盘到page cache,再从page cache到用户缓存,再从用户缓存到socket缓存,最后再发送。
为了减少不必要的拷贝,kafka通过零拷贝技术,直接将page cache中的数据复制到socket缓存中。