Kafka 协议中使用了可变长度(Varints)和可变长度字节数组(VarBytes)的编码方式,这是一种高效的数据表示方法。

可变长度整数(Varints)

Kafka 使用可变长度编码来表示整数,这种编码的特点是:

  • 较小的数字占用较少的字节

  • 每个字节的最高位用作标志位,表示是否还有后续字节

  • 实际数据只使用每个字节的低7位

编码规则:

  1. 将数字转换为二进制

  2. 从最低7位开始,每次取7位作为一个字节

  3. 如果还有更高位需要编码,则设置当前字节的最高位为1

  4. 最后一个字节的最高位为0

示例:

数字300的编码:

  • 二进制:1 00101100

  • 分组:10 0101100

  • 编码:10101100 00000010

    • 第一个字节:0101100 (低7位) + 1(还有后续) → 10101100 (0xAC)

    • 第二个字节:0000010 (剩余高位) + 0(结束) → 00000010 (0x02)

可变长度字节数组(VarBytes)

Kafka 中表示可变长度字节数组的方式:

  1. 先使用Varint编码表示字节数组的长度N

  2. 然后跟随N个字节的实际数据

格式:[长度][数据]

posted on 2025-05-15 21:54  towboat  阅读(23)  评论(0)    收藏  举报