인프런 커뮤니티 질문&답변

raccoon님의 프로필 이미지
raccoon

작성한 질문수

[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!

수동 커밋 컨슈머 애플리케이션

오프셋 커밋이 실패된 이후 consume 하는 경우 문의

작성

·

202

0

안녕하세요.

컨슈머에서 오프셋 커밋이 네트워크 등의 장애로 실패하고나면 동일한 컨슈머에서는 해당 오프셋을 다시 읽게 되나요?
아니면, 해당 오프셋은 skip 되나요?

예를 들어서, 아래와 같이 한 개의 파티션에 10개의 레코드가 있는 경우를 가정해볼게요.

(비동기 수동 커밋 가정, 가져오는 레코드 개수는 1개씩)

 

1, 2, 3, 4, 5, 6, 7, 8, 9, 10

 

1 ~ 2 번까지는 오프셋 커밋이 정상적으로 이루어지고, 3번을 제외한 4번까지 오프셋 커밋이 되었다고 가정해보면,
다음 poll() 메서드에서는 5번 오프셋을 가져오게 되나요?
아니면 3번 오프셋을 다시 조회하게 되나요?

 

감사합니다.

답변 2

0

데브원영 DVWY님의 프로필 이미지
데브원영 DVWY
지식공유자

안녕하세요.

일반적으로 컨슈머에서 오프셋 커밋이 실패하게 되더라도 레코드를 추가로 더 처리한 이후에 커밋을 수행합니다. 그러므로 레코드들은 순서대로 처리되고 커밋이 실패하더라도 계속해서 다음 오프셋의 레코드들이 들어오게 됩니다.

다만, 오프셋 실패 이후 컨슈머가 종료되게 된다면 마지막 오프셋의 레코드부터 컨슈머가 처리했던 마지막 레코드까지는 중복 처리하게 되비다.

0

안녕하세요, 인프런 AI 인턴입니다.

컨슈머에서 오프셋 커밋이 실패한 경우 해당 컨슈머 그룹의 오프셋 커밋 위치는 변경되지 않고 유지됩니다. 따라서 다음 poll() 호출 시 컨슈머는 마지막 성공적으로 커밋된 오프셋 다음부터 메시지를 다시 읽기 시작합니다. 이 경우 마지막 성공적으로 커밋된 오프셋이 2 였다면, 다음 poll() 메서드 호출에서 3 번 오프셋부터 다시 처리하게 됩니다.

오프셋 커밋 실패 후 처리 방식에 대해 더 깊게 이해하고자 하신다면 Kafka 공식 문서의 ‘Checking consumer position’ 섹션을 참고하실 수 있습니다:
https://kafka.apache.org/documentation/#basic_ops_consumer_lag

여기서 제공된 kafka-consumer-groups.sh 도구를 사용하여 특정 컨슈머 그룹의 오프셋 위치 및 로그 끝과의 차이를 확인하실 수 있습니다.

raccoon님의 프로필 이미지
raccoon

작성한 질문수

질문하기