Kafka 概要设计
胡夕 - 《Kafka实战》笔记 kafka的设计从四方面进行了考量: 吞吐量/延时 高吞吐量 消息持久化 高可用 负载均衡和故障转移 高可用 伸缩性 高伸缩性 吞吐量和延时 写入消息 kafka写入磁盘的速度很快,得益于他对磁盘的使用方式不同。虽然Kafka会持久化所有数据到磁盘,但本质上每次写入操作系统的其实只是把数据写入到操作系统的 页缓存 ,然后由操作系统自行决定什么时候把页缓存数据写回磁盘。 这样设计的三个优势: 操作系统的页缓存是在内存中分配的,所以写入消息的速度很快。 Kafka不必直接与底层的文件系统打交道,所有繁琐的IO操作都由操作系统来处理。 Kafka的写入是追加Append的方式,避免了 磁盘的随机读写 实际上磁盘的顺序读写和内存的随机读写速度相差无几 消费消息 同样,消费消息前,Kafka在读消息时首先尝试从OS页缓存中读取。如果命中,则从页缓存中字节发送到网络的Socket中。这个过程是利用Linux的sendfile系统调用做到的,这就是 零拷贝技术(Zero Copy) 总结 kafka依靠以下四点达到高吞吐量和低延迟的目的: 大量使用操作系统的页缓存,内存操作速度快且命中率高 Kafka不直接参与物理IO操作 采用追加写入的方式,而不是随机读写 使用sendfile的零拷贝技术提高了网络数据的传输效率 消息持久化 消息持久化的好处: