記一次生產kafka消息消費的事故

事故背景:微信

  咱們公司與合做方公司有個消息同步的需求,合做方是消息生產者,咱們是消息消費者,他們經過kafka給咱們推送消息,咱們實時接收,而後進行後續業務處理。昨天上午,發現他們推送過來的廣場門店信息咱們都沒有消費,致使咱們系統和他們系統數據不一致,從而致使沒法提單,沒法出報表(報表有誤)等各類問題網絡

排查過程:運維

(1)由於coco身體不適,上午請假去醫院了,因此這個問題就轉給咱們team的專門運維的同事了,電話大概給他說明了代碼路徑,惋惜,半天下來仍然無果,看着微信羣裏他發的消息,我有點抓狂,根本沒有找到點上,半天了沒查出緣由,咱們業務端也頂着壓力,一個勁兒地給我打電話。測試

(2)中午12:30點,coco回到公司,立馬開電腦開始排查,讓他們從新推送消息,查看日誌,發現咱們根本沒有消費到。初步判斷,應該不是咱們客戶端的問題,初步定位緣由:a.網絡問題;b.網絡丟包;c.生產者生產機制有問題,實際沒有推送過來。spa

(3)由於以前一直是好好的,近期這個需求也沒有作過任何改動,網絡也是通的,感受可能不是網絡的問題,可是也要排查,由於這個已是去年年初的需求了,原熟悉這塊業務的人早已離職,因此排查起來有點慢。咱們公司在合做公司面前又沒多大話語權,每次有問題都是直接甩鍋給咱們,每次排查出來都是他們的問題。此次,我讓他們先排查自身問題,他們依然說,不是他們的緣由等等。日誌

(4)網絡排查:根據代碼,查出咱們鏈接生產者zookeeper的集羣地址。而後我找到咱們應用所在主機IP。ping了下是通的。可是telnet端口的時候明顯就不通了,很明顯的網絡問題啊。截圖給對方,他們依然不認,說本身測試都是ok的,coco此時內心真的是一萬個mmp啊,然而,臉上還要笑嘻嘻……爲啥以前一直通的,忽然就有問題了呢,讓對方研發問他們那邊最近有沒有作過網絡調整,那哥們直接說沒有……涉及公司與公司間的網絡權限,確定要走流程去申請啦。我就去找咱們這邊網絡組的老大,把事故簡要地說明了下,他說,合做方公司前幾天有下線過一批主機呀,我聯繫他們,包不包含這幾臺,此刻,個人內心大石頭終於放下了,找對人了。code

ping的結果:blog

telnet的結果:接口

(5)後來,在這個leader、咱們項目經理的協調下,找了對方公司的網管,確認是他們近期作了網絡調整致使的。而後,對方公司對接人去提了網絡申請,該問題算是初步獲得瞭解決,下午2:40左右,網絡給打開了,可是咱們依然沒有收到消息,他們又從新推送了一條,依然沒有接收到。kafka

(6)分析咱們消費端的代碼,處理業務bean上實現的是 InitializingBean類,在初始化bean的時候都會執行該方法。因此,咱們這邊的應用須要重啓才行。因而,我又申請重啓應用,由於是核心應用,只能等到晚上才能重啓。

(7)晚上8點左右,應用重啓了,但是,依然沒有消費到消息,理論上他們生產的消息沒有消費,咱們是直接能夠消費的啊,這個還須要後續查看。我又聯繫他們從新推送了幾條數據,我這邊能夠消費了。而後他們全量推送了下,該問題獲得初步解決。

(8)爲何積壓的消息咱們消費不到,仍在研究中。

(9)對於此類初始化時候執行的方法,若是中途有相似網絡問題,該如何處理?

 

結論:

對於生產正在用的接口,一直好好的,忽然出問題,若是是全量問題,首先要排查網絡問題,若是是部分數據有問題,則要考慮是不是網絡丟包,是不是消息丟失。

覆盤:

其實,這個問題真的從根源上解決了嗎?並無,根據生產日誌,查詢得知,自6.5日開始,就沒有消費過消息了,說明6.5號就有問題了啊。咱們系統也沒有報異常,沒有通知到負責人,爲何消費者連不上生產者zookeeper主機的時候,仍不報異常呢,這個coco還在排查。

 

  ConsumerConfig conf = new ConsumerConfig(props); //連不通可是沒有報異常 
  ConsumerConnector consumer = kafka.consumer.Consumer.createJavaConsumerConnector(conf);

 

 代碼:

相關文章
相關標籤/搜索