1、批量消息提升服务端broker处理能力,减少了broker处理请求的次数
(1)发送端
Kafka 的 Producer 只提供了单条发送的 send() 方法,并没有提供任何批量发送的接口。原因是,Kafka 根本就没有提供单条发送的功能,Kafka 的客户端 SDK 在实现消息发送逻辑的时候,采用了异步批量发送的机制。当你调用 send() 方法发送一条消息之后,无论你是同步发送send(ProducerRecord<K,V> record)还是异步发送send(ProducerRecord<K,V> record, Callback callback),Kafka 都不会立即就把这条消息发送出去。它会先把这条消息,存放在内存中缓存起来,然后选择合适的时机把缓存中的所有消息组成一批,一次性发给 Broker。(linger.ms和batch.size)
(2)broker端
不会将这一批消息拆开,而是作为整体处理
(3)consumer端
consumer把这批消息拆开,一条一条处理
2、使用顺序读写提升磁盘IO性能
对于每个分区,把从producer收到的消息,顺序写入对应的log文件中,写满一个,再写下一个;
读取的时候也是从某个位置开始顺序的读取
3、缓存,利用PageCache加速读写消息
读写文件时都是从PageCache中读取,如果PageCache中没有,则os引发断页中断,程序的读取进程阻塞,OS把文件读取到PageCache中,程序再从PageCache中读取。OS清理内存中缓存的策略LRU
PageCache 是由操作系统来维护的