6.kafka数据检索机制

6.kafka数据检索机制

  • topic在物理层面以partition为分组,一个topic可以分成若干个partition
  • partition还可以细分为Segment,一个partition物理上由多个Segment组成
    • segment 的参数有两个:
      • log.segment.bytes:单个segment可容纳的最大数据量,默认为1GB
      • log.segment.ms:Kafka在commit一个未写满的segment前,所等待的时间(默认为7 天)
  • 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)等等 字段,可以确定一条消息的大小,即读取到哪里截止。