消息队列在多种场景中,都有使用,比如异步处理、应用解耦、流量削锋和消息通讯。在日志处理中,利用Kafka可以解决大量日志传输、缓存等问题。
Kafka优势
- 分布式:Broker、Producer、Consumer都原生自动支持分布式,自动实现负载均衡
- 存储时间久
- 吞吐量高
结合实际,本文重点谈谈Kafka是通过什么机制来实现快速读写。
顺序I/O
随机存取一般使用RAM作为数据存储,但当数据量极大时,对应成本相当大。Kafka使用文件系统进行存储和读取,主要问题是磁盘要比RAM慢,而磁盘慢的一个重要原因是磁盘寻道时间要大于数据读取时间。针对磁盘存储,如果能将寻道时间优化,数据读写会大幅接近RAM存储。因此,Kafka使用顺序I/O,避免了磁盘寻道时间消耗。
图1 Kafka顺序I/O
在数据文件存储上,Kafka为数据文件进行了分段存储,并且为每个文件单独建立了索引。