暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

kafka之Varints

产品与码农 2021-02-16
543

 Kafka从0.11.0版本开始所使用的消息格式版本为v2,这个版本的消息相比v0和v1的版本而言改动很大,同时还参考了Protocol Buffer[1]而引入了变长整型(Varints)和ZigZag编码。为了更加形象地说明问题,本文介绍一下变长整型。




介绍



Varints是使用一个或多个字节来序列化整数的一种方法。数值越小,其占用的字节数越少。Varints中每个字节都有一个位于最高位的msb位【most significant bit】,除最后一个字节外,其余msb位都设置为1,最后一个字节的msb位为0。这个msb表示其后的字节是否和当前字节一起来表示同一个整数。除msb位外,剩余的7位用于存储数据本身,这种表示类型又称为Base 128。通常而言,一个字节8位可以表示256个值,所以称为Base 256,而这里只能用7位表示,2的7次方即128。Varints中采用的是小端字节序,即最小的字节放在最前面。



举例




如下图就是一个具体的整数值在kafka日志中的存储结构,也就是 123456789,最终16进制存储为95 9A EF 3A 占用4个字节





文章转载自产品与码农,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论