kafka存储机制

kafka存储机制

每条消息都会被追加到该partition的末尾,是顺序写磁盘,因此效率非常高(经验证,顺序写磁盘效率比随机写内存还要高,这是Kafka高吞吐率的一个很重要的保证。

 

生产者只能向分区的末尾追加消息,消费者只能从分区中前往后依次进行消费。

kafka存储机制

 

kafka存储机制

 

同一个topic下有多个不同的partition,每个partition为一个目录,partition命名的规则是topic的名称加上一个序号,序号从0开始。

kafka存储机制

 

每一个partition目录下的文件被平均切割成大小相等(默认一个文件是500兆,可以手动去设置)的数据文件,每一个数据文件都被称为一个段(segment file),但每个段消息数量不一定相等,这种特性能够使得老的segment段可以被快速清除。默认保留7天的数据。

kafka存储机制

kafka存储机制

 

 

顺序写:

kafka存储机制

问题:如何保证消息消费的有序性?

一个partition中的数据不是严格有序的,而是间隔有序,不连续。因为kafka采用的是稀疏索引。

针对一个topic里面的数据,只能做到partition内部有序,不能做到全局有序。特别是加入消费者的场景后,如何保证消费者的消费的消息的全局有序性,这是一个伪命题,只有在一种情况下才能保证消费的消息的全局有序性,那就是只有一个partition!。

kafka存储机制

消息的检索机制:

kafka存储机制