2017-08-25 118 views
0

我們正在使用Spring Kafka實現卡夫卡消費者。正如我理解正確的話單信息的處理失敗,有選項卡夫卡消耗無法處理的消息 - 以後如何重新處理破碎的消息?

  • 不關心,只是ACK
  • 不要使用一些重試處理一個RetryTemplate
  • 如果連這不起作用做一些自定義故障處理使用RecoveryCallback

我想知道你的最佳做法是什麼。我想到了簡單的應用程序異常,例如DeserializationException(用於JSON格式的消息)或更長的本地存儲停機時間等。這意味着需要一些額外的工作,如修補程序部署,以修復損壞的應用程序以便能夠重新處理錯誤的消息。由於丟失消息(即不處理它們)對我們來說不是一種選擇,唯一剩下的選擇是IMO將有故障的消息存儲在某個持久性存儲中,例如, G。另一個「錯誤消息」例如Kafka話題,以便這些事件可以在稍後再次處理,並且不需要完全停止事件處理。

你如何處理這些情況?

回答

3

一個例子是Spring Cloud Stream,它可以配置爲將失敗消息發佈到另一個主題errors.foo;用戶可以將其複製回原始主題以便稍後重試。

該邏輯在恢復回調中完成。

1

我們有一個用例,即使對於錯誤的消息我們也不能丟棄任何消息。因此,當我們遇到錯誤的消息時,我們將發送默認消息來代替該錯誤記錄,同時將消息發送給失敗的主題以便以後重試。