Apache kafka 当密钥为空时,ProducerRequest发送[…255,255,255…]
我正在使用客户端,我正在试图理解卡夫卡协议。我有一个基本的生产者示例,它发送Apache kafka 当密钥为空时,ProducerRequest发送[…255,255,255…],apache-kafka,protocols,kafka-producer-api,Apache Kafka,Protocols,Kafka Producer Api,我正在使用客户端,我正在试图理解卡夫卡协议。我有一个基本的生产者示例,它发送消息,而不使用键: producer.send([ { topic: "mytopic", messages: ["hi"] }, ], 如果我分析消息的帧(tcpdump),我会得到: 所以我不明白为什么键为空时,在255处有4字节。我在文档中的任何地方都找不到此语句的解释。键的类型为bytes。字节使用带符号的int32来指定数据的长度 如果键为null,则长度设置为-1。-1作为符号int32的表示是2
消息
,而不使用键
:
producer.send([
{ topic: "mytopic", messages: ["hi"] },
],
如果我分析消息的帧(tcpdump
),我会得到:
所以我不明白为什么键为空时,在
255处有4
字节。我在文档中的任何地方都找不到此语句的解释。键的类型为bytes
。字节使用带符号的int32来指定数据的长度
如果键为null
,则长度设置为-1
。-1
作为符号int32
的表示是255255255
(0xffffff
)
消息值类似。首先,长度为符号int32
,0,0,0,2
,然后是实际的2个字节
[
79, CRC
44,
52,
245, END CRC
0, magic_byte
0, partitions
255, size key begin
255, -1 as the key is null
255,
255, size key end
0, size message begin
0,
0,
2, size message end
104, 'h'
105, 'i' ]
参见《卡夫卡协议指南》中的本节:
字节,字符串-这些类型由一个有符号整数组成,给出
长度N后跟内容的N字节。长度为-1表示
无效的字符串使用int16作为其大小,字节使用int32
键的类型为bytes
。字节使用带符号的int32来指定数据的长度
如果键为null
,则长度设置为-1
。-1
作为符号int32
的表示是255255255
(0xffffff
)
消息值类似。首先,长度为符号int32
,0,0,0,2
,然后是实际的2个字节
[
79, CRC
44,
52,
245, END CRC
0, magic_byte
0, partitions
255, size key begin
255, -1 as the key is null
255,
255, size key end
0, size message begin
0,
0,
2, size message end
104, 'h'
105, 'i' ]
参见《卡夫卡协议指南》中的本节:
字节,字符串-这些类型由一个有符号整数组成,给出
长度N后跟内容的N字节。长度为-1表示
无效的字符串使用int16作为其大小,字节使用int32