6.kafka数据检索机制
- topic在物理层面以partition为分组,一个topic可以分成若干个partition
- partition还可以细分为Segment,一个partition物理上由多个Segment组成
- segment 的参数有两个:
- log.segment.bytes:单个segment可容纳的最大数据量,默认为1GB
- log.segment.ms:Kafka在commit一个未写满的segment前,所等待的时间(默认为7 天)
- segment 的参数有两个:
- LogSegment 文件由两部分组成,分别为“.index”文件和“.log”文件,分别表示为 Segment 索引文 件和数据文件。
- partition全局的第一个segment从0开始,后续每个segment文件名为上一个segment文件 最后一条消息的offset值
- 数值大小为64位,20位数字字符长度,没有数字用0填充
第一个segment 00000000000000000000.index 00000000000000000000.log 第二个segment,文件命名以第一个segment的最后一条消息的offset组成 00000000000000170410.index 00000000000000170410.log 第三个segment,文件命名以上一个segment的最后一条消息的offset组成 00000000000000239430.index 00000000000000239430.log
- 消息都具有固定的物理结构,包括:offset(8 Bytes)、消息体的大小(4 Bytes)、crc32(4 Bytes)、 magic(1 Byte)、attributes(1 Byte)、key length(4 Bytes)、key(K Bytes)、payload(N Bytes)等等 字段,可以确定一条消息的大小,即读取到哪里截止。