1. 程式人生 > 其它 >使用tcpdump+Wireshark抓包分析kafka通訊協議

使用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

歡迎關注微信公眾號:大資料從業者