我使用的是kafka节点客户端,我试图理解kafka协议。我有一个基本的生产者的例子,它发送 message
没有 key
:
producer.send([
{ topic: "mytopic", messages: ["hi"] },
],
如果我分析一下信息的框架( tcpdump
)我得到:
[
79, CRC
44,
52,
245, END CRC
0, magic_byte
0, partitions
255, =================
255,
255,
255, ==================
0, size message begin
0,
0,
2, size message end
104, 'h'
105, 'i'
]
所以我不明白为什么 4
字节数 255
当钥匙是空的。我在文件里找不到对这句话的解释。
1条答案
按热度按时间ivqmmu1c1#
钥匙的类型是
bytes
. 字节使用signed int32
指定数据的长度。如果钥匙是
null
,长度设置为-1
. 代表-1
作为一个signed int32
是255,255,255,255
(0xffffffff
)消息值类似。首先你有一个
signed int32
,0,0,0,2
,后跟实际的2个字节。参见《Kafka协议指南》中的本节:http://kafka.apache.org/protocol#protocol_types
字节,字符串-这些类型由一个有符号整数组成,给出长度n,后跟n字节的内容。长度为-1表示null。字符串使用int16作为其大小,字节使用int32。