Kafka 协议中使用了可变长度(Varints)和可变长度字节数组(VarBytes)的编码方式,这是一种高效的数据表示方法。
可变长度整数(Varints)
Kafka 使用可变长度编码来表示整数,这种编码的特点是:
-
较小的数字占用较少的字节
-
每个字节的最高位用作标志位,表示是否还有后续字节
-
实际数据只使用每个字节的低7位
编码规则:
-
将数字转换为二进制
-
从最低7位开始,每次取7位作为一个字节
-
如果还有更高位需要编码,则设置当前字节的最高位为1
-
最后一个字节的最高位为0
示例:
数字300的编码:
-
二进制:1 00101100
-
分组:10 0101100
-
编码:10101100 00000010
-
第一个字节:0101100 (低7位) + 1(还有后续) → 10101100 (0xAC)
-
第二个字节:0000010 (剩余高位) + 0(结束) → 00000010 (0x02)
-
可变长度字节数组(VarBytes)
Kafka 中表示可变长度字节数组的方式:
-
先使用Varint编码表示字节数组的长度N
-
然后跟随N个字节的实际数据
格式:[长度][数据]