使用tcpdump+Wireshark抓包分析kafka通信协议

tcpdump 是Linux平台上网络抓包、分析神器,wireshark可用在Windows上以可视化方式直接分析查看tcpdump抓取的数据文件。且wireshark内置支持很多常见应用协议解析,其中就包括kafka通信协议(Wireshark 2.4.0到2.6.0)。因此我们可以通过tcpdump抓取kafka数据包保存到文件,通过wireshark分析学习kafka通信协议交互。

下面以librkafka中的performance Demo程序为例,以高级消费者API连接kafka消费消息,简单分析一下抓包和解析过程。

首先需要注意,必须将kafka收、发两端的包都抓取到,才能正确解析。因此我们在客户端,根据kafka所使用9092端口抓包: (为便于分析,kafka中只有一条消息) 


tcpdump -i any -nn -vv tcp port 9092 -s 0 -w rdkafka_performance.cap

然后将抓包文件传到Windows机器,用wireshark打开:

1、wireshark可能未能自动识别出kafka协议(例如本例中一开始协议被识别为SMPP)。首先检查一下Wireshark是否支持kafka协议解析:在过滤条件那里输入”kafka”,如果自动弹出下拉列表,对应各个kafka字段,说明是支持kafka协议解析的。
《使用tcpdump+Wireshark抓包分析kafka通信协议》
《使用tcpdump+Wireshark抓包分析kafka通信协议》

2、接下来点选中一条数据消息(注意不要选中TCP三次握手的消息),右键,点击“解码为”:
《使用tcpdump+Wireshark抓包分析kafka通信协议》
《使用tcpdump+Wireshark抓包分析kafka通信协议》

3、在弹出窗口的“当前”下拉列表中选择“kafka”,然后点击“OK”。
《使用tcpdump+Wireshark抓包分析kafka通信协议》
《使用tcpdump+Wireshark抓包分析kafka通信协议》

4、可以看到除了tcp控制报文外,其他报文都被解析成kafka协议(如解析不出来,可尝试退出wireshark重新打开)。 选中某一条kafka协议,可以看到前面会用箭头标注与之相关的请求报文或响应报文。可能一个请求报文会对应多个响应报文。
《使用tcpdump+Wireshark抓包分析kafka通信协议》
《使用tcpdump+Wireshark抓包分析kafka通信协议》

5、 接下来就可以具体查看某个请求或响应报文的详细字段了。例如 1)下图是请求MetaData消息
《使用tcpdump+Wireshark抓包分析kafka通信协议》
《使用tcpdump+Wireshark抓包分析kafka通信协议》

2) 下图展示了一个kafka OffsetFetch Response 消息。可以看到partition 0、partition 1的offset都是 -1(KAFKA_OFFSET_END)
《使用tcpdump+Wireshark抓包分析kafka通信协议》
《使用tcpdump+Wireshark抓包分析kafka通信协议》

3) kafka Fetch Request,可以看到向Partition 0请求消息,起始offset是0,Max Bytes是1MB。
《使用tcpdump+Wireshark抓包分析kafka通信协议》
《使用tcpdump+Wireshark抓包分析kafka通信协议》

4) Kafka Fetch Response,消息内容为“The first record”。Partition是0。
《使用tcpdump+Wireshark抓包分析kafka通信协议》
《使用tcpdump+Wireshark抓包分析kafka通信协议》

5)这里只是简单分析了几个协议,完整的协议介绍可以参考: A Guide To The Kafka Protocol :
https://cwiki.apache.org/confluence/display/KAFKA/A+Guide+To+The+Kafka+Protocol kafka协议指南 :
http://colobu.com/2017/01/26/A-Guide-To-The-Kafka-Protocol/

    原文作者:icycode
    原文地址: https://blog.csdn.net/icycode/article/details/80034774
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞