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 存储的也是压缩的数据。消费者在拉取音讯时,也是压缩的数据,在解决前才会解压音讯。
发表回复