記一次生產(chǎn) Kafka 掛掉的那幾分鐘
本文轉(zhuǎn)載自微信公眾號「Java極客技術(shù)」,作者鴨血粉絲。轉(zhuǎn)載本文請聯(lián)系Java極客技術(shù)公眾號。
Hello,大家好,我是阿粉,作為一個后端工程師不經(jīng)歷幾次生產(chǎn)事故怎么能成長!阿粉工作幾年來,大大小小,重要不重要的事故也經(jīng)歷了不少,有損失幾十萬的,有對業(yè)務(wù)毫無影響但是不應(yīng)該發(fā)生的,每一次事故都是一次成長,而且從每次的事故中阿粉都能學(xué)到很多東西,不單單是解決問題,更重要的是對線上有了更深的敬意!
背景
上周下午兩點(diǎn)多的時候,阿粉正在悠閑的敲著代碼,零星的看到幾條報(bào)警機(jī)器人發(fā)的 Kafka 集群負(fù)載高的報(bào)警信息,看到是負(fù)載高而已就沒怎么在意,更何況這個點(diǎn)還不是高峰期,想著過會應(yīng)該就好了。誰知道過了一會不見好,而且還越來越多,趕緊拿著電腦跑到運(yùn)維處去看看是什么情況。不看不知道,一看嚇一跳,集群中某個 topic 的數(shù)據(jù)寫不進(jìn)去了!但是生產(chǎn)者端沒有任何報(bào)錯,看上去還在正常寫入,集群卻在報(bào)錯,而且消費(fèi)端也沒有消費(fèi)到數(shù)據(jù)。
報(bào)錯內(nèi)容如下:
- [2020-10-28 15:12:32,923] ERROR [KafkaApi-2] Error when handling request {replica_id=-1,max_wait_time=500,min_bytes=1,topics=[{topic=xxxx,partitions=[{partition=0,fetch_offset=409292609,max_bytes=1048576}]}]} (kafka.server.KafkaApis)
- java.lang.IllegalArgumentException: Magic v1 does not support record headers
看到這程序肯定是沒有問題的,因?yàn)樽罱鼪]有升級,嘗試重啟集群和服務(wù)但是問題依舊存在, 這個時候?yàn)榱吮WC業(yè)務(wù)的穩(wěn)定,考慮到這個 topic 可能有問題,決定刪掉這個 topic 然后自動重新創(chuàng)建,雖然會丟失部分?jǐn)?shù)據(jù),但是并不會產(chǎn)生大的影響,但是如果服務(wù)長時間寫不進(jìn)去數(shù)據(jù)將會更嚴(yán)重。
處理
好在我們的服務(wù)是基于 Nacos 做的服務(wù)配置與發(fā)現(xiàn),修改 Nacos 里面的 Kafka 集群配置臨時切換到另一套集群里面,然后重啟服務(wù),因?yàn)槲覀儧]有開啟 Nacos 配置自動生效。切換過后數(shù)據(jù)正常寫入到新的集群,然后手動將舊集群中的有錯誤的 topic 刪掉,刪掉出錯的 topic 過后集群變得一切正常,沒有出現(xiàn)上面的錯誤。既然沒有錯誤了,通過修改 Nacos 將集群配置切換回來,一切也正常。
整個事故從發(fā)現(xiàn)到解決差不多經(jīng)歷了二十幾分鐘,但是因?yàn)閯傞_始忽略了報(bào)警信息,導(dǎo)致差不多影響了一個小時的數(shù)據(jù),好在這個數(shù)據(jù)對線上業(yè)務(wù)本身不會出現(xiàn)大的影響,而且通過切換到臨時集群以及日志數(shù)據(jù),還可以找回來一部分。
事后復(fù)盤了一下,主要總結(jié)了以下幾點(diǎn),分享給大家,共勉:
- 敬畏線上!線上環(huán)境報(bào)警信息第一時間查看確保沒問題!
- 保證線上數(shù)據(jù)安全,及時備份和切換臨時環(huán)境(這塊一定要做好動態(tài)配置,別慢慢的還要走發(fā)布流程,推薦使用 Nacos);
- 事后復(fù)盤,回顧整個處理過程,哪些地方可以優(yōu)化,哪些地方做的不對浪費(fèi)了時間,下次再遇到這種情況是否可以快速解決。生產(chǎn)上時間就是金錢,事故多一分鐘就多一分鐘風(fēng)險(xiǎn),有點(diǎn)時候一分鐘可以改變很多東西。
上面的錯誤網(wǎng)上大部分說的都是版本沖突,但是阿粉這邊并沒有升級過,所以這個問題就比較玄學(xué)了。
總結(jié)
遇到問題不可怕,沒有人能保證服務(wù)不出問題,我們要做的就是在遇到問題的時候沉著泠靜,想到應(yīng)對策略,在最短的時間的想到最好的解決方案,減少風(fēng)險(xiǎn)和損失才是最重要的。另外我們一定懂得敬畏線上,特別的那些非常重要的業(yè)務(wù),不然一旦出現(xiàn)問題后果都是很嚴(yán)重的。
最后邀請你加入我們的知識星球,這里有 1800+ 優(yōu)秀的人與你一起進(jìn)步,如果你是小白那你是穩(wěn)賺了,很多業(yè)內(nèi)經(jīng)驗(yàn)和干貨分享給你;如果你是大佬,那可以進(jìn)來我們一起交流分享你的經(jīng)驗(yàn),說不定日后我們還可以有合作,給你的人生多一個可能。