1、日志文件布局
__consumer_offset 存储着消费者提交的生产位移
2、日志存储格局
V0
音讯格局
- offset:
每一条音讯都有一个 offset 用来标记它在分区中的偏移量,offset 是逻辑值,而非理论物理偏移量
- message_size:
示意音讯的大小
- crc32(4B):
crc32 校验值。校验范畴为 magic 至 value 之间
- magic(1B):
音讯格局版本号,V0 固定为 0
- attributes(1B):
音讯的属性。总共占 1 个字节,低 3 位示意压缩类型。
0:NONE、1:GZIP、2:SNAPPY;3:LZ4. 其余位保留
- key length(4B):
-1, 示意没有设置 key
- key:
可选
- value lengtj(4B):
音讯体的长度,-1,示意为空
- value:
音讯体
V1
kafka
从 0.10.0
版本至 0.11.0
版本之前所应用的音讯格局版本为 v1
, 比 v0
多了一个 timestamp
字段
音讯格局
- magic(1B):
音讯格局版本号,V0 固定为 1
- attributes(1B):
前三位同样示意压缩类型。
第 4 位:0-timestamp 类型为 CreateTime
, 1-timestap 类型为 LogAppendTime
timestamp
类型由 broker
端参数 log.message.timestamp.type
配置,默认值为 CreateTime
V2
kafka
版本从 0.11.0
之后都称为 v2.
- length
音讯总长度
- attributes
弃用
- timestamp delta
工夫戳增量,保留与 RecordBatch
起始工夫戳的差值
- offset delta
位移增量,保留与 RecordBatch
起始位移的差值
- headers
反对利用级别的扩大
- first offset
以后 RecordBatch
的起始位移
- length
计算从 partitionleader epoch
字段开始到开端的长度
- partitionleader epoch
分区 leader 的版本号或更新次数
- magic
V2 固定为 2
- attributes
占用 2 个字节;低三位示意压缩格局,第 4 位示意工夫戳类型,第 5 位示意 RecordBatch
是否处于事务中,0- 非事务,1- 事务。第 6 位示意是否是管制音讯,0- 非管制,1- 管制,管制音讯用来反对事务性能
- last offset delta
RecordBatch
中最初一个 Record
的 offset
与 first offset
的差值。最要被 broker
用于确保 RecordBatch
中 Record
组装的正确性
- first timestamp
RecordBatch
第一条 Record
工夫戳
- max timestamp
RecordBatch
中最大工夫戳
- producer id
PID, 用于反对幂等和事务
- producer epoch
用于反对幂等和事务
- first sequence
用于反对幂等和事务
- record count
RecordBatch
中 Record
个数
3、消息压缩
broker
可通过 compression.type
配置压缩形式,默认 producer
,即保留生产者的压缩形式
何时压缩
kafka
可能在 producer
端或者 broker
端中进行压缩。
当音讯在 broker
端从新压缩时,会造成性能降落,因而须要尽量避免。
以下会在 broker
端产生从新压缩
broker
端和producer
端不同的压缩算法。broker
端产生音讯格局转换,即新版本音讯向老版本音讯转化。
何时解压缩
kafka
将多条音讯放一起压缩,生产者发送的是压缩的数据,broker 存储的也是压缩的数据。消费者在拉取音讯时,也是压缩的数据,在解决前才会解压音讯。