“ log在物理上只以文件夹的形式存储,而每个LogSegment对应于磁盘上的一个日志文件和两个索引文件,以及可能的其他文件。
”
向Log中追加消息时是顺序写入的,只有最后一个LogSegment才能执行写入操作,在此之前的所有LogSegment都不能写入数据。为了方便描述,将最后一个LogSegment成为“activeSegment”,即表示当前活跃的日志分段。随着消息的不断写入,当activeSegment满足一定的条件时,就需要创建新的activeSegment,之后追加的消息将写入新的activeSegment

消息格式-v2
————
.log文件

名词解析:
Record-length:消息总长度
Record-attributes:弃用,保留1B大小
Record-timestamp delta:时间戳增量
Record-offset delta:位移增量
Record-headers:头部信息,用于支持应用级别的扩展,可以包含0到多个Header
RecordBatch-first offset:表示当前RecordBatch的起始位移
RecordBatch-length:计算从partition leader epoch子端开始到末尾的长度
RecordBatch-partition leader epoch:分区leader纪元,可以看做分区leader的版本号或更新次数
RecordBatch-magic:消息格式的版本号,=2
RecordBatch-attributes:消息属性,注意这里占了两个字节;低3位表示压缩格式,第4位表示时间戳类型;第5位表示此RecordBatch是否处于事务中,0表示非事务,1表示事务;第6位表示是否是控制消息【ControlBatch】,0表示非控制消息,1表示控制消息,控制消息用于支持事务功能。
RecordBatch-last offset delta:RecordBatch中最后一个Record的offset与first offset的差值。主要被broker用来确保RecordBatch中Record组装的正确性。
RecordBatch-first timestamp:RecordBatch中第一条Record的时间戳
RecordBatch-max timestamp:RecordBatch中最大的时间戳,一般情况下是指最后一个Record的时间戳和last offset delta的作用一样,用来确保消息组装的正确性。
RecordBatch-producer id:PID,用于支持幂等和事务。
RecordBatch-producer epoch:和producer id一样,用来支持幂等和幂等
RecordBatch-first sequence:和producer id、producer epoch一样,用来支持幂等和事务。
RecordBatch-records count:RecordBatch中Record的个数。
索引文件与日志文件
————





