producerrequest在密钥为空时发送[..255,255,255..]

zvms9eto  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(406)

我使用的是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 当钥匙是空的。我在文件里找不到对这句话的解释。

ivqmmu1c

ivqmmu1c1#

钥匙的类型是 bytes . 字节使用 signed int32 指定数据的长度。
如果钥匙是 null ,长度设置为 -1 . 代表 -1 作为一个 signed int32255,255,255,255 ( 0xffffffff )
消息值类似。首先你有一个 signed 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' ]

参见《Kafka协议指南》中的本节:http://kafka.apache.org/protocol#protocol_types
字节,字符串-这些类型由一个有符号整数组成,给出长度n,后跟n字节的内容。长度为-1表示null。字符串使用int16作为其大小,字节使用int32。

相关问题