2016-11-29 43 views
1

我正在讀取一個文件並在卡夫卡上記錄每條記錄。這裏是我的生產者代碼:收集未成功寫入卡​​夫卡的消息

​​

根據我們的基本測試,有可能由於TimeoutException而產生消息。但是,根據official documentation of Callback TimeoutException是一個可反悔的異常。在接下來的重試中可能會產生這個消息。因此,如果我在回調中發現TimeoutException,我不能認爲記錄發送失敗。有沒有任何可行的方法,我可以肯定地說,記錄發送失敗並將其記錄在單獨的文件中?

回答

2

我簡要介紹了一下代碼,並不認爲你需要在這裏區分可反悔和不可反悔的異常,因爲這已經發生在KafkaProducer中。

當您配置生產者的重試值大於1時,它會在向您返回異常之前,重新發送任何失敗且帶有可回退異常的消息(按照您告訴的次數)。

所以基本上,任何消息,你回來了,除了生產者已經放棄了。

看看completeBatch & canRetry在代碼,以確認我的理解,但個人,我認爲這種行爲是有道理的。