Kafka消息头、消息体格式的疑问

lene 发表于: 2022-05-13   最后更新时间: 2022-05-13 12:50:12   1,552 游览

1、Kafka生产数据,通过抓包发现实际发送的字节数远远大于我生产消息的字节数,我猜测到其中会有Kafka协议框架字节,用于处理粘包、加密、版本控制等,但是我目前找不到资料具体对应我实际的抓包字节,很多字节我还是不明白是什么意思。

2、我看了 https://www.orchome.com/626 中的消息格式,但是和我实际抓包的字节也难以对应,也看了一些其他的文章,把前半部分报文连猜带蒙解析了出来,但是后半部分还是不会解析。

3、我想问下是否可以帮我解析完剩下的后半部分报文,或者有没有这块的资料,我去研究下继续往下解析。

4、下图是我WireShark的抓包截图
screenshot

5、下面是我的报文分析:

0010   6f 64 75 63 65 72 2d 31 00 00 00 01 00 00 75 30   oducer-1......u0
0020   02 07 64 61 74 61 30 32 02 00 00 00 00 5b 00 00   ..data02.....[..
0030   00 00 00 00 00 00 00 00 00 4e ff ff ff ff 02 19   .........N......
0040   6e 89 3b 00 00 00 00 00 00 00 00 01 80 bb 0f d8   n.;.............
0050   6f 00 00 01 80 bb 0f d8 6f ff ff ff ff ff ff ff   o.......o.......
0060   ff ff ff ff ff ff ff 00 00 00 01 38 00 00 00 10   ...........8....
0070   39 39 39 39 39 39 39 39 1c 41 42 43 44 45 46 47   99999999.ABCDEFG
0080   48 49 4a 4b 4c 4d 4e 00 00 00 00                  HIJKLMN....
Kafka生产者消息:
topic = data02
key = 99999999
value = ABCDEFGHIJKLMN

00 00 00 87 = 消息长度:135字节
00 00 = API Key:请求类型:生产消息
00 09 = API 版本:9
00 00 00 04 = 消息ID:用于匹配客户端和服务器之间的请求和响应
00 0a = 客户端ID长度:10 字节
70 72 6f 64 75 63 65 72 2d 31 = 客户端ID:producer-1
00 00 = 事务ID
00 01 = ACK类型: leader
00 00 75 30 = 超时时间:30000 毫秒

后半部分报文如下(到了这里我就不会解析了):

02 07 
[topic][64 61 74 61 30 32] 
02 00 00 00 00 5b 00 00 00 00 00 00 00 00 00 00 
00 4e ff ff ff ff 02 19 6e 89 3b 00 00 00 00 00 
00 00 00 01 80 bb 0f d8 6f 00 00 01 80 bb 0f d8 
6f ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 
00 00 01 38 00 00 00 10 
[key][39 39 39 39 39 39 39 39] 
1c 
[value][41 42 43 44 45 46 47 48 49 4a 4b 4c 4d 4e] 
00 00 00 00

6、其实前半段报文我也是根据网上各种文章结合WireShark自带的一些解析蒙的,我并没有找到官方的资料,希望能够得到答案,谢谢。

发表于 2022-05-13
¥10.0

你看的是落到磁盘的格式。
我只能提供一点思路,在等等其他人的回答吧。

kafka生产者是按「批」发送的,也就是说,一个批次,包含多条消息。

另外,key、value会受

props.setProperty("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.setProperty("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");

序列化的影响,所以你转的时候注意一下发送前的消息序列化格式。

你的答案

查看kafka相关的其他问题或提一个您自己的问题