为什么80%的码农都做不了架构师?>>>
Kafka的消息是保存或缓存在磁盘上的,你可能会认为:在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间。事实上,磁盘读写的快慢取决于你怎么使用它了(顺序读写、随机读写)。
Kafka的设计目标是高吞吐量,它比其它消息系统快的原因体现在以下几方面:
1、Kafka操作的是序列文件I / O(序列文件的特征是按顺序写,按顺序读),为保证顺序,Kafka强制点对点的按顺序传递消息,这意味着,一个consumer在消息流(或分区)中只有一个位置。
2、Kafka不保存消息的状态,即消息是否被“消费”。一般的消息系统需要保存消息的状态,并且还需要以随机访问的形式更新消息的状态。而Kafka 的做法是保存Consumer在Topic分区中的位置offset,在offset之前的消息是已被“消费”的,在offset之后则为未“消费”的,并且offset是可以任意移动的,这样就消除了大部分的随机IO。
3、Kafka支持点对点的批量消息传递。
4、Kafka的消息存储在OS pagecache(页缓存,page cache的大小为一页,通常为4K,在Linux读写文件时,它用于缓存文件的逻辑内容,从而加快对磁盘上映像和数据的访问)。