每一个partition目录下的文件被平均切割成大小相等(默认一个文件是500兆,可以手动去设置)的数据文件, 每一个数据文件都被称为一个段(segment file),但每个段消息数量不一定相等,这种特性能够使得老的segment可以被快速清除。 默认保留7天的数据。
每个partition下都会有这些每500兆一个每500兆一个(当然在上面的测试中我们将它设置为了1G一个)的segment段。
另外每个partition只需要支持顺序读写就可以了,partition中的每一个segment端的生命周期是由我们在配置文件中指定的一个参数觉得的。 比如它在默认情况下,每满500兆就会创建新的segment段(segment file),每满7天就会清理之前的数据。
它的一个特点就是支持顺序写。如下图所示:
首先00000000000000000000.log文件是最早产生的文件,该文件达到1G(因为我们在配置文件里面指定的1G大小,默认情况下是500兆) 之后又产生了新的0000000000000672348.log文件,新的数据会往这个新的文件里面写,这个文件达到1G之后,数据就会再往下一个文件里面写, 也就是说它只会往文件的末尾追加数据,这就是顺序写的过程,生产者只会对每一个partition做数据的追加(写)的操作。
转载者的话:之前面试被面道 如何实现顺序写而非随机写。首先顺序写性能是随机写的万倍(300MB/S:30KB/S);性能超过固态硬盘,是kafka高兴能的保证之一 ,其次还有buffer减少IO,以及零拷贝避免二次拷贝以及内核态到用户态的切换。但是我不懂顺序写是如何实现的,之前学习zookeeper知道follower的事物文件是先申请一块64M的连续磁盘空间,当不足4KB时再申请一块64M的连续磁盘空间,当有新事物来时,只在文件尾部做追加操作,可能达到磁盘顺序写的效果。好像中奖了。。