kafka学习笔记6

1 kafka文件存储机制

1.1 kafka文件存储的基本结构

说明:a、在kafka文件存储中,同一个topic下有多个不同的partition,每个partition为一个
	   为一个目录,partition的命名规则为topic名称+有序序号,第一个partition从0开
	   始,序号最大值为partitions数量减1;
	b、每个partition(目录)相当于一个巨型文件被平均分配到多个大小相等的segment(段)数
	   据文件中。但每个segment file的消息数量不一定相等。这种特性方便old segment
	   file快速被删除,默认保留七天的数据;

   c、每个partition只需要支持顺序读写就行了,segment文件的生命周期由服务端配置参数决
	  定。

注:针对一个topic里面的数据,只能做到partition内部有序,不能做到全局有序。只有一种情
   况下才能保证全局有序,就是只有一个partition。

1.2 Kafka Partition Segment

a、Segmemt file组成:由2部分组成,分别为index file和data file,此两个文件一一对应成
   对出现,后缀".index"和".log"分别表示为segment索引文件和数据文件;

b、Segment file命名规则是partition全局的第一个segment从0开始,后续每个Segment file
   文件名为上一个Segment file最后一个消息的offset的值。数值最大为64位long大小,19位
   数字字符长度,没有数字用0填充;
c、索引文件存储大量元数据,数据文件存储大量的消息,索引文件中的元数据指向对应数据文件中
   message的物理偏移地址;

d、Segment data file由许多message组成,物理结构如下:

1.3 Kafka查找Message

示例:读取offset=368776的message,需要通过下面两步查找:

第一步:查找segment file
	  00000000000000000000.index表示最开始的文件,起始偏移量(offset)为0
	  00000000000000368769.index的消息量起始偏移量为368770 = 368769 + 1
      00000000000000737337.index的起始偏移量为737338=737337 + 1
      其他后续文件依次类推。
	  以起始偏移量命名并排序这些文件,只要根据offset **二分查找**文件列表,
	  就可以快速定位到具体文件。当offset=368776时定位到00000000000000368769.index
	  和对应log文件;
第二步:通过segment file查找message
	   当offset=368776时,依次定位到00000000000000368769.index的元数据物理位置和00000000000000368769.log的物理偏移地址
	   然后再通过00000000000000368769.log顺序查找直到offset=368776为止。
posted @ 2018-04-11 15:38  我亦在  阅读(216)  评论(0编辑  收藏  举报