赞
踩
V0版本主要是指Kafka0.10.0.0之前的版本,是kafka最早的消息版本
字段含义
消息头部(message Header):除了Key和Value之外的所有字段统称为消息头部。总共占用14字节(4B+1B+1B+4B+4B),即V0版本的消息长度最小是14B
此版本的问题
V1版本主要是[0.10.0.0,0.11.0.0)之间的版本
V1与V0的主要差异
CREATE_TIME
,CREATE_TIME
表示在消息创建时由producer指定的时间戳LOG_APPEND_TIME
。LOG_APPEND_TIME
表示消息被发送到broker端时由broker指定的时间戳。Kafka的消息层次分为:消息集合(message set)和消息。V0和V1版本使用的是日志项(log entry),以下是日志项的格式
每个消息集合中的日志项由shallow message和log entry header组成
V1版本主要是0.11.0.0(包含)之后的版本。此版本相比于v0和v1改动很大,引入了变长整型(Varints)和ZigZag编码(借鉴ProtoBuffer中的Zig-zag编码方式,绝对值较小的整数占用比较少的字节)。Varints是使用一个或多个字节来序列化整数的一种方法,数值越小,其所占用的字节数就越少。Zig-zag编码方式,使得绝对值较小的整数占用比较少的字节
字段详解
V2版本中消息集合(message set)被消息批次所取代,叫做RecordBatch。这里的RecordBatch与producer中的batch不是一个含义。
bath字段详解
CRC被放入Batch
增加2B的attribute。
最低3位依然是压缩类型
第4位保存时间戳类型(NO_TIMESTAMP_TYPE是-1,CREATE_TIME是0,LOG_APPEND_TIME是1)。
第5位事务类型(事务消息是1,非事务消息是0)
第6位控制类型(ABORT是0,COMMIT是1,UNKNOWN是-1)
PID、 producer epoch 和序列号等信息都是 0.11.0.0 版本为了实现幂等性 producer 和支持事务而引入的。Kafka依靠PID+epoch
来辨别消息是否己成功提交,从而防止出现重复生产消息。
0.11.0.0版本(及以后)的 Kafka消息在支持事务、幕等性 producer的同时还在一定程度上减少了网络I/O和磁盘 I/O 的开销(因V2版本协议的缘故)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。