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