使用tcpdump+Wireshark抓包分析kafka通信協議


tcpdump 是Linux平台上網絡抓包、分析神器,wireshark可用在Windows上以可視化方式直接分析查看tcpdump抓取的數據文件。且wireshark內置支持很多常見應用協議解析,其中就包括kafka通信協議(Wireshark 2.4.0到2.6.0)。因此我們可以通過tcpdump抓取kafka數據包保存到文件,通過wireshark分析學習kafka通信協議交互。
Wireshark支持的kafka協議字段可參考此鏈接: https://www.wireshark.org/docs/dfref/k/kafka.html
Wireshark內置支持的協議類型非常多,可以參考: https://www.wireshark.org/docs/dfref/
下面以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協議解析的。

2、接下來點選中一條數據消息(注意不要選中TCP三次握手的消息),右鍵,點擊“解碼為”:

 

 3、在彈出窗口的“當前”下拉列表中選擇“kafka”,然后點擊“OK”。


4、可以看到除了tcp控制報文外,其他報文都被解析成kafka協議(如解析不出來,可嘗試退出wireshark重新打開)。

選中某一條kafka協議,可以看到前面會用箭頭標注與之相關的請求報文或響應報文。可能一個請求報文會對應多個響應報文。

 

5、 接下來就可以具體查看某個請求或響應報文的詳細字段了。例如

1)下圖是請求MetaData消息

 

 2) 下圖展示了一個kafka OffsetFetch Response 消息。可以看到partition 0、partition 1的offset都是 -1(KAFKA_OFFSET_END)

 

 3) kafka Fetch Request,可以看到向Partition 0請求消息,起始offset是0,Max Bytes是1MB。

 

 4) Kafka Fetch Response,消息內容為“The first record”。Partition是0。

 

 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/
————————————————
版權聲明:本文為CSDN博主「icycode」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/icycode/article/details/80034774


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM