乐趣区

关于kafka:kafka-系列-71日志存储

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

kafka0.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 中最初一个 Recordoffsetfirst offset 的差值。最要被 broker 用于确保 RecordBatchRecord 组装的正确性

  • first timestamp

RecordBatch 第一条 Record 工夫戳

  • max timestamp

RecordBatch 中最大工夫戳

  • producer id

PID, 用于反对幂等和事务

  • producer epoch

用于反对幂等和事务

  • first sequence

用于反对幂等和事务

  • record count

RecordBatchRecord 个数

3、消息压缩

broker 可通过 compression.type 配置压缩形式,默认 producer,即保留生产者的压缩形式

何时压缩

kafka 可能在 producer 端或者 broker 端中进行压缩。

当音讯在 broker 端从新压缩时,会造成性能降落,因而须要尽量避免。

以下会在 broker 端产生从新压缩

  1. broker 端和 producer 端不同的压缩算法。
  2. broker 端产生音讯格局转换,即新版本音讯向老版本音讯转化。

何时解压缩

kafka 将多条音讯放一起压缩,生产者发送的是压缩的数据,broker 存储的也是压缩的数据。消费者在拉取音讯时,也是压缩的数据,在解决前才会解压音讯。

退出移动版