インターフェース 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
方法の詳細
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 (viaacknowledge(),release(), orreject())- 導入:
- 4.1
- 次の