web-dev-qa-db-ja.com

カフカからの失敗メッセージを再試行する方法

My spring-boot application(consumer)Apache Kafkaからメッセージを処理します。定期的に、マッサージは処理され、消費者が例外をスローできません。とにかく消費者はオフセットをコミットします。カフカの失敗メッセージから成功メッセージを区別できますか?私は考えられないと思います。それは本当ですか?それが本当なら、私は主な質問をしています:

どのようにして再試行する方法 失敗メッセージ?私はいくつかの方法を知っていますが、私は彼らの正確さがわからない。

1)オフセットを早く変更します。しかし、このようにして成功メッセージも再試行します。

2)例外をキャッチすると、このメッセージを別のトピックに送信します(たとえば、エラートピック)。しかし、それは難しいです。

3)何か他のもの(あなたの変種)

5
ip696

少なくとも一度保証が必要な場合は、一般的なパターンは次のとおりです。

  • 自動コミットを無効にする(enable.auto.commitをfalseに設定)
  • メッセージを消費する
  • メッセージごとに:

    • エラーがない場合は、オフセットをコミットします
    • エラーが発生したら、何度でもご希望の場合は再試行してください
    • 成功した場合は、コミットしてください
    • あきらめたい場合は、エラーキューにログまたは公開したい場合(分析または後の再試行用)
  • 繰り返す

5
senseiwu

SeekToCurrentErrorHandler を使用してください。オフセットを再配置してメッセージを再生します(デフォルトでは10回、設定可能)。

再試行が枯渇した後、それは deadletterpublishingrecoverer のようないくつかの行動をとることができる「回復者」を呼び出します。

2
Gary Russell