インターフェース ShareAcknowledgment


public interface ShareAcknowledgment
共有グループを使用するときにレコードの配信を確認するためのハンドル。

共有グループを使用すると、複数のコンシューマーが同じパーティションのレコードを処理できる協調消費が可能になります。処理結果を示すには、各レコードを明示的に確認応答する必要があります。

確認の種類:

  • ACCEPT - レコードは正常に処理されました
  • RELEASE - 一時的な障害、再試行可能にする
  • REJECT - 永久的な失敗です。再試行しないでください
  • RENEW - 取得ロックを延長する (non-terminal; a terminal ack is still required)

このインターフェースは、リスナーがレコードごとの確認応答の決定を行う ContainerProperties.ShareAckMode.MANUAL モードでのみ使用されます。EXPLICIT モードでは、コンテナーが確認応答を自動的に処理し、IMPLICIT モードでは、ブローカーがすべてのレコードを自動的に受け入れます。どちらの場合も、リスナーに渡される確認応答引数は null になります。

メモ: 確認応答はコミット操作とは別です。レコードを確認応答した後、commitSync() または commitAsync() を使用してブローカーへの確認応答を永続化します。

導入:
4.0
作成者:
Soby Chacko
  • 方法の概要

    修飾子と型
    メソッド
    説明
    void
    レコードが正常に処理されたことを確認します。
    void
    永続的な障害のため、レコードを拒否します。
    void
    一時的な障害による再配信のためにレコードを解放します。
    void
    記録の取得ロックを更新しますが、その結果は変更しません。
  • 方法の詳細

    • acknowledge

      void acknowledge()
      レコードが正常に処理されたことを確認します。

      レコードは完了としてマークされ、再配信されません。確認応答は以下の場合にコミットされます。

      • 次の poll() は (フェッチでバッチ処理)
      • commitSync() または commitAsync() が明示的に呼び出される
      • コンシューマーは閉鎖されている
      例外:
      IllegalStateExceptionSE - 記録がすでに承認されている場合
      導入:
      4.0
    • release

      void release()
      一時的な障害による再配信のためにレコードを解放します。

      記録は再度の配信試行に利用できるようになります。確認応答は以下の場合にコミットされます。

      • 次の poll() は (フェッチでバッチ処理)
      • commitSync() または commitAsync() が明示的に呼び出される
      • コンシューマーは閉鎖されている
      例外:
      IllegalStateExceptionSE - 記録がすでに承認されている場合
    • reject

      void reject()
      永続的な障害のため、レコードを拒否します。

      記録は再配信されず、アーカイブされます。確認応答は以下の場合にコミットされます。

      • 次の poll() は (フェッチでバッチ処理)
      • commitSync() または commitAsync() が明示的に呼び出される
      • コンシューマーは閉鎖されている
      例外:
      IllegalStateExceptionSE - 記録がすでに承認されている場合
    • renew

      void renew()
      記録の取得ロックを更新しますが、その結果は変更しません。

      処理時間がブローカーのロック期間(group.share.record.lock.duration.ms、デフォルトは 30 秒)を超える可能性がある場合に使用します。ブローカーはロック期間を延長し、処理が継続している間、レコードが再配信されないようにします。

      これは非終端です: renew() は複数回呼び出すことができますが、処理が完了したら、acknowledge()release()reject() のいずれか 1 つを正確に呼び出す必要があります。

      The acknowledgment will be committed when:

      • 次の poll() は (フェッチでバッチ処理)
      • commitSync() または commitAsync() が明示的に呼び出される
      • コンシューマーは閉鎖されている
      例外:
      IllegalStateExceptionSE - if the record has already been terminally acknowledged (via acknowledge(), release(), or reject() )
      導入:
      4.1