使用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協議解析的。


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 :
kafka協議指南 :
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章