Manually Committing Offsets
일반적으로, AckMode.MANUAL
또는 AckMode.MANUAL_IMMEDIATE
를 사용할 때 카프카는 각 레코드의 상태를 저장하지 않고 각 그룹/파티션에 커밋된 오프셋만 갖고있으므로 acknowledgment
를 순서대로 확인해야 한다. 버전 2.8부터 폴링에서 반환된 레코드에 대한 acknowledgment
가 어떤 순서로든지 확인 가능하게 하는 컨테이너 프로퍼티 asyncAcks
를 설정할 수 있다. 리스너 컨테이너는 누락된 acknowledgment
가 수신될 때까지 순서가 잘못된 커밋을 연기한다. 이전 폴링에 대한 모든 오프셋이 커밋될 때까지 컨슈머는 일시적으로 중지된다(새 레코드가 전달되지 않음).
이 기능을 사용하면 애플리케이션이 레코드를 비동기적으로 처리할 수 있지만, 실패 후 중복 전달 가능성이 높아진다는 점을 이해해야 한다.
asyncAcks
가 활성화되면, 오프셋 커밋 시 nack()
을 사용할 수 없다.