topic中partition存储分布
Topic在逻辑上可以被认为是一个queue。每条消费都必须指定它的topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得 Kafka的吞吐率可以水平扩展,物理上把topic分成一个或多个partition,每个partition在物理上对应一个文件夹,该文件夹下存储 这个partition的所有消息和索引文件。partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。
partition中文件存储方式
下面示意图形象说明了partition中文件存储方式:
- 每个partion(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中,但每个段segment file消息数量不一定相等,下面会提到一消息数量的算法,因为每个segment的大小是一定的,但是每条消息的大小可能不相同,因此数量不同。
- 每个partiton只需要支持顺序读写就行了,segment文件生命周期由服务端配置参数决定,这样做的好处就是能快速删除无用文件,有效提高磁盘利用率。
partition中segment文件存储结构
前面提到了每个topic被分成了多个partition分布到各个broker上,而每个partition的文件夹中又又多个小文件组成。
- segment file组成:由2大部分组成,分别为index file和data file,此2个文件一一对应,成对出现,后缀".index"和“.log”分别表示为segment索引文件、数据文件. <