컨슈머가 poll() 메서드를 호출할 때마다 컨슈머는 컨슈머 그룹에서 배정된 파티션에서 아직 읽지 않은 메시지를 가져온다.이렇게 동작 할 수 있는 것은 컨슈머 그룹이 파티션에서 읽은 지점까지의 위치값을 저장하기 때문에 알 수 있다.

오프셋 저장 (커밋정보)

초기 카프카는 이 오프셋 정보를 주기커에 저장했지만 주키퍼의 write 오버헤드로 인해서 최신 버전(0.9 이후)에서는 카프카 내부 토픽 (__consumer_offsets)에 오프셋 정보를 저장한다.

리밸런스에 의해 컨슈머들이 새로운 파티션에 배정되어도 이전에 기록된 오프셋 정보를 이용해서 그 이후 메시지를 가져오게 된다.

자동 커밋

자동커밋은 enable.auto.commit=true 컨슈어 옵션으로 사용할 수 있다.

단, 아래와 같은 상황에서 메시지 중복 처리가 발생할 수 있다.

수동 커밋

만약 메시지 처리가 완료될 때 까지 메시지를 가져온 것으로 간주되어서는 안되는 경우에는 수동 커밋을 사용하여 제어할 수도 있다.

특정 오프셋부터 가져오기