更多課程 選擇中心
        Java培訓

        400-111-8989

        Java培訓 > Java教程  > 正文

        干貨!一次kafka卡頓事故排查過程

        • 發布:Java培訓
        • 來源:Java教程
        • 時間:2018-05-25 13:52

        由于一次功能上線后,導致某數據量急劇下滑,給我們緊張的呢!排查過程也是個學習過程!拋開結果,方法論可供參考~

        干貨!一次kafka卡頓事故排查過程

        1. 確認問題的真實性?

        被數據部門告知,某數據量下滑嚴重,當時即知道問題的嚴重性。且該問題是在我的功能上線后產生,第一反應就是,我代碼哪里寫錯了? 但是,還得按流程來,通過各種維度數據對比請求量,實際落地量。確認問題!

        其實該過程中,我們并沒有確認自己的數據量下滑。但是這也脫不了數據下滑的干系。只能進行下一步!

        2. 檢查代碼,找有經驗的同學,對比原有功能差異點?

        這個步驟其實,是有點盲目的感覺。因為第一步的排查并沒有找到足夠的證明說明問題出在我們,但是問題在于期間只有我們上過線,所以只能自我反省了。

        不過幸好,這過程還真有用,果真發現了自己埋的一個坑,此坑確實會導致該數據量的下滑。趕緊修掉唄!

        然后松了一口氣,以為搞好了。其實不然,數據量依然上不去。這就尷尬了!

        我已經開始懷疑人生,難道代碼沒發上去?難道線上和本地某個地方不一樣?測試環境反復測試正確無誤。我真想直接把測試環境代碼弄到線上去,哎,算了吧,很多東西是不會以人的意志為轉移的,咱們還是理性點!別謀出路吧!

        3. 直接坐到dba旁邊去吧,讓我們隨時關注數據量?

        自我排查已經救不了自己了,那就上dba那里。麻煩幫我統計下上線后,數據量的變化,結果是沒多大差別。心想有可能是時間太短,看不出變化,等會兒再統計吧。依然沒有變化!我的神吶,定了鍋還在。

        大的數據量不行,那我用自己的賬號來測試吧,操作完成后,觀察數據,發現有時有有時無!額,說不出啥了。

        4. 本地調試吧?

        原本以為,是線上問題,緊急處理下就好了。然而事實卻超出了我的預料,將驗證直接交給線上,是對用戶的不負責,是對數據的不負責。咱們還是從本地做起吧。

        本地調試要走vpn,有點煩,但不管怎么樣,還是跑起來了。沒問題啊!這尷尬了。

        然后,引出下一個議題!

        5. 線上環境配置與測試環境不一樣?

        然后我們努力找出其中的不同點,哪怕是多了一個文件,某個文件的更改時間點不一致,我們都想去試一下!當然了,為了穩妥起見,我們還是不能直接在線上驗證的,除非有足夠的證據說明線上的配置是有問題的。當然我們最終并沒有找到這樣的證據,只是將線上的所有東西都搬到測試環境來驗證,結果是暢通無阻!

        還有一個證明此路不通的理由,之前的配置跑得好好的東西,難道會自己壞掉?不可能吧。此路不通!

        6. 實在不行了,只能改代碼線上調試?

        調試第一步,各自打日志!把之前請求打印不全的地方,加上完整日志,再發一版吧!有了日志,就有證據,但是真的是急中生錯啊,日志居然打得不對,將參數打印為了內存地址也真是夠了。

        日志改好后,測試唄,繼續用自己的賬號。還是一樣,有時能能進有時不能(監控手段為dba起一個臨時的kafka消費者,然后將數據拉出來看)!那咋整呢?

        難道是有的機器壞了?分配到壞的機器上去的請求就失敗,分配到正確機器的上去的請求就正確。然后吭哧吭哧搞了半天的數據驗證,曾經以為這是方向,結果又被打回。

        7. 不行咱們就抓包吧?

        tcpdump,一個網絡流抓包神器,lsof助攻一下。

        抓包只是為了確認一個問題,客戶機器有發送請求到服務端機器,網絡流正常運轉!然后證明,客戶端機器有大量長連接到服務器,數據流發送接收正常(syn)。這至少說明了一點,客戶端是沒有問題的!那么就還剩一個問題,那就是服務端出問題了!我們堅信,當然要有證據嘛。

        同理,我們在服務端機器上進行反向抓包,然后抓到了來自客戶端的包,很流暢嘛!額。。。

        8. 不行,沒有思路了,重啟機器吧?

        不,我說的是重啟服務。最近不是有改動嘛,按理誰改動重啟誰。然而這是沒有用的,因為之前的幾次發布早已重啟了n次。那咋整呢。只剩重啟服務端,kafka服務了唄,死馬當活馬醫吧!

        重啟后,驗證唄。結果貌似還是發現有成功,有失敗!

        9. 改異步請求為同步請求?

        又沒思路了,我不甘心吶,為啥測試環境好好的,到線上就不行了呢?再想想差別在哪里?

        得出的結論是,線上并發大,測試環境量無。然后發現這一塊代碼是由異步線程做的,會不會是這里有問題?

        不管了,改成同步請求試試吧。再來一版!

        別說,改為同步后,雖然用戶請求基本都慢死了,但是發現kafka請求確實存在了。難道真的是因為這個,那我們也不能這么改啊,用戶體驗是第一位的,為了這事改異步為同步,咱得吃不了兜著走啊。改回來繼續其他的吧!

        10. 再回測試環境,壓測并發?

        改還原為異步后,又回到當初有成功有失敗境地了。

        既然懷疑線上高并發導致,那為什么不在測試環境高并發壓測一下呢?用shell腳本快速寫了一個循環請求腳本,大量請求到kafka后,并無一絲異常,到此并發問題取消。(for,nohup a.sh > /dev/null 2&>1 &)n 次即模擬n個并發請求

        11. 再來細細檢查代碼吧?

        都不知道查了幾遍了,但是還是要查啊,不然咋整呢,幾個人一起看代碼唄!

        然而這并沒有什么卵用。

        12. 拋開用戶行為,直接以命令行形式操作請求?

        雖然用戶行為是最真實的驗證,但是也是比較麻煩的驗證。

        我們就拋開各種中間環節,直接向kafka服務器發起請求!

        分兩種方式,1 用現在的代碼去請求,2 用kafka自帶的請求方式請求。結果得到兩個不同的結果,用代碼的方式請求的數據,沒有成功,用kafka自己的請求方式,則毫秒級響應。哎,這是讓我又懷疑代碼?

        13. 已走投無路,讓我們再看一眼數據吧?

        真的是沒有思路了,只能再來看看數據,當打發時間了。

        意外就在你想不到的時候發生了。數據已經恢復正常了!我擦!

        倒推時間,倒推事件,是由于kafka重啟,導致數據回升的。

        好吧,問題已經定位,kafka卡頓導致。咱們已經熬不住了,發個結論郵件,就先回去洗洗睡吧!

        14. 為什么kafka會卡頓?

        這才是問題的根本!只是我們當時已經沒有力氣再往下搞了!

        結論是由于topic請求量過大,而partition過小,導致吞吐量下降。將partition改大之后,終于真正恢復正常!

        額,好像做了很多無用功,沒辦法 !

        感謝大家閱讀由Java教程分享的“干貨!一次kafka卡頓事故排查過程”希望對大家有所幫助,更多精彩內容請關注Java培訓機構官網

        免責聲明:本文由小編轉載自網絡,旨在分享提供閱讀,版權歸原作者所有,如有侵權請聯系我們進行刪除

        預約申請免費試聽課

        填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

        上一篇:干貨!Java后端程序員1年工作經驗總結
        下一篇:JAVA8 JVM的變化: 元空間(Metaspace)
        12大要點讓你的Java開發所向披靡~

        12大要點讓你的Java開發所向披靡~

        學習Java最好的12本免費在線電子書

        學習Java最好的12本免費在線電子書

        Java常用日志框架介紹

        Java常用日志框架介紹

        一篇文章了解RPC框架原理

        一篇文章了解RPC框架原理

        • 掃碼領取資料

          回復關鍵字:視頻資料

          免費領取 達內課程視頻學習資料

        • 視頻學習QQ群

          添加QQ群:1143617948

          免費領取達內課程視頻學習資料

        Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

        選擇城市和中心
        貴州省

        福建省

        • 達內廈門軟件園中心
        廣西省

        海南省

        国产高清情侣视频2019年,限制电影福利在线观看,23伊人大香蕉 百度 好搜 搜狗
        <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>